このエラーが発生する
タイプ「AnalyticController」のコントローラを作成しようとしたときにエラーが発生しました。コントローラーにパラメーターのないパブリックコンストラクターがあることを確認します。
コードはテスト環境で機能しますが、本番サーバーでは機能しません。
問題を引き起こす可能性のあるアイデアは何ですか?
これは私のコントローラーです
public class AnalyticController : ApiController
{
private AnalyticBLL analyticBLL = new AnalyticBLL();
// POST api/status
public void Post(AnalyticDTO analyticDTO)
{
if (!analyticBLL.Register(analyticDTO))
helpers.BusinessLayer.CreateResponseException(analyticBLL.Errors);
}
}
パラメータなしのパブリックコンストラクタを追加すると、問題は解消されます。
public class AnalyticController : ApiController
{
public AnalyticController()
{
}
// Variables and methods are the same as before
}
それは、DI(依存性注入)の処理方法によって異なります。デフォルトでは、コントローラーにはパラメーターのないコンストラクターが必要であり、DIを処理するにはUnityやNinjectなどを使用する必要があります。 ApiControllerから継承しているようです。Ninjectを使用している場合は、必ず Ninject for Web API をダウンロードしてください。私があなたに言ったすべてをすでに知っているなら、あなたはより多くの情報を与える必要があります。あなたのセットアップは何ですか? DIには何を使用していますか?
パラメータ付きコンストラクタで例外が発生したため、このエラーが発生しました。エラーメッセージにもかかわらず、パラメーターのないコンストラクターの要求とは何の関係もありませんでした。
これが他の人を助けるかどうかわからない。私は自分のアプリをビルドし、すべてのローカル(開発)ボックスでWebサービスに対して実行します。次に、運用環境に配置する前に、既存の運用環境のWebサービスをポイントするアプリを実行します。これは通常は機能しますが、今回は「開発中」で機能しましたが、「コントローラーにパラメーターのないパブリックコンストラクターがあることを確認してください」というエラーメッセージ「運用中」(実際には運用中ではなく、運用Webサービスに対して)を示しています。 。
これらの解決策はどれも私のコードの問題のようには見えませんでした。コードを運用環境にデプロイしたときに、すべてが運用環境にあるときにこのエラーは発生しませんでした。私の推測では、開発ボックスとプロダクションの間で、NuGetパッケージの異なるバージョンに関係している可能性があります。私は調査しますが、他の人が同様の「開発に対しては機能するが製品に対しては機能しない」という状況に備えて、これを提供したかっただけです。これは、環境の問題である可能性があります(意味するところによっては、「製品版」では機能しない)。