web-dev-qa-db-ja.com

コントローラにパラメータのないパブリックコンストラクタがあることを確認してください

このエラーが発生する

タイプ「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);   
    }
}
11
GibboK

パラメータなしのパブリックコンストラクタを追加すると、問題は解消されます。

public class AnalyticController : ApiController
{
   public AnalyticController()
   {
   }

   // Variables and methods are the same as before
}
6

それは、DI(依存性注入)の処理方法によって異なります。デフォルトでは、コントローラーにはパラメーターのないコンストラクターが必要であり、DIを処理するにはUnityやNinjectなどを使用する必要があります。 ApiControllerから継承しているようです。Ninjectを使用している場合は、必ず Ninject for Web API をダウンロードしてください。私があなたに言ったすべてをすでに知っているなら、あなたはより多くの情報を与える必要があります。あなたのセットアップは何ですか? DIには何を使用していますか?

14
Pharylon

パラメータ付きコンストラクタで例外が発生したため、このエラーが発生しました。エラーメッセージにもかかわらず、パラメーターのないコンストラクターの要求とは何の関係もありませんでした。

5
user2444499

これが他の人を助けるかどうかわからない。私は自分のアプリをビルドし、すべてのローカル(開発)ボックスでWebサービスに対して実行します。次に、運用環境に配置する前に、既存の運用環境のWebサービスをポイントするアプリを実行します。これは通常は機能しますが、今回は「開発中」で機能しましたが、「コントローラーにパラメーターのないパブリックコンストラクターがあることを確認してください」というエラーメッセージ「運用中」(実際には運用中ではなく、運用Webサービスに対して)を示しています。 。

これらの解決策はどれも私のコードの問題のようには見えませんでした。コードを運用環境にデプロイしたときに、すべてが運用環境にあるときにこのエラーは発生しませんでした。私の推測では、開発ボックスとプロダクションの間で、NuGetパッケージの異なるバージョンに関係している可能性があります。私は調査しますが、他の人が同様の「開発に対しては機能するが製品に対しては機能しない」という状況に備えて、これを提供したかっただけです。これは、環境の問題である可能性があります(意味するところによっては、「製品版」では機能しない)。

0
rsmith