从Web.config中读取Ninject WithConstructorArguments

时间:2013-02-04 22:36:20

标签: c# asp.net-mvc-4 web-config ninject

我有以下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正确填充了值。

但是,在运行时,当内核完成绑定时,我得到以下异常:

enter image description here

如果我用常量替换ConfigurationManager引用,应用程序运行正常。

我不想失去通过配置文件配置Ninject的能力,这是Ninject的限制吗?

1 个答案:

答案 0 :(得分:3)

不,Ninject没有这样的限制。

我认为问题是ConfigurationManager.AppSettings["DatabaseId"]返回string而你的dbId参数的类型为int(或其他非字符串类型)。

尝试:

var databaseId = Int32.Parse(ConfigurationManager.AppSettings["DatabaseId"]); 
kernel.Bind<IStore>()
      .To<Store>()
      .WithConstructorArgument("dbId", databaseId);