我有以下 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
正在正确填充值。
但是,当内核完成绑定(bind)时,运行时出现以下异常:
如果我用常量替换 ConfigurationManager
引用,应用程序运行正常。
我不想失去通过配置文件配置 Ninject 的能力,这是 Ninject 的限制吗?
最佳答案
不,Ninject 没有这样的限制。
我想问题是 ConfigurationManager.AppSettings["DatabaseId"]
返回 string
而你的 dbId
参数是 类型int
(或其他一些非字符串类型)。
尝试:
var databaseId = Int32.Parse(ConfigurationManager.AppSettings["DatabaseId"]);
kernel.Bind<IStore>()
.To<Store>()
.WithConstructorArgument("dbId", databaseId);
关于c# - 从 Web.config 读取 Ninject WithConstructorArguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697038/