我有以下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的限制吗?
答案 0 :(得分:3)
不,Ninject没有这样的限制。
我认为问题是ConfigurationManager.AppSettings["DatabaseId"]
返回string
而你的dbId
参数的类型为int
(或其他非字符串类型)。
尝试:
var databaseId = Int32.Parse(ConfigurationManager.AppSettings["DatabaseId"]);
kernel.Bind<IStore>()
.To<Store>()
.WithConstructorArgument("dbId", databaseId);