4

次のRegisterServices関数があります。

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind<ISearchRepository>().To<SearchRepository>();
    kernel.Bind<ITagRepository>().To<TagRepository>();
    kernel.Bind<IStore>().To<Store>()
        .WithConstructorArgument("dbId", ConfigurationManager.AppSettings["DatabaseId"])
}

ConfigurationManagerブレークポイントを使用して、値が正しく入力されていることを確認できます。

ただし、実行中、カーネルがバインドを終了すると、次の例外が発生します。

ここに画像の説明を入力してください

ConfigurationManager参照を定数に置き換えると、アプリケーションは正常に実行されます。

設定ファイルを介してNinjectを設定する機能を失いたくないのですが、これはNinjectの制限ですか?

4

1 に答える 1

3

いいえ、Ninjectのそのような制限はありません。

問題は、ConfigurationManager.AppSettings["DatabaseId"]returnsstringであり、dbId引数が型int(またはその他の非文字列型)であることにあると思います。

試す:

var databaseId = Int32.Parse(ConfigurationManager.AppSettings["DatabaseId"]); 
kernel.Bind<IStore>()
      .To<Store>()
      .WithConstructorArgument("dbId", databaseId);
于 2013-02-04T23:03:54.790 に答える