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"]返回string并且您的dbId参数是类型int(或其他一些非字符串类型)。

尝试:

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