【发布时间】:2013-10-26 18:47:05
【问题描述】:
我声明了以下绑定
Bind<IDataSource>().To<DataSourceOne>();
Bind<ISettings>().To<DataSourceSettings>
.WhenInjectedInto<DataSourceOne>();
Bind<ISettings>().To<Settings>();
现在我打电话
Kernel.Get<IDataSourc>();
Ninject 正确注入了 DataSourceSettings,但我需要根据配置文件中的数据将构造函数参数传递给 Settings 和 DataSourceSettings。所以我改变了 IDataSouce 绑定如下
Kernel.Bind<IDataSource>().To<DataSourceOne>()
.WithConstructorArgument("settings", Kernel.Get<ISettings>(
new ConstructorArgument("data", objectContainingConfigFileData)
)
);
在这种情况下,Ninject 注入 Settings 类而不是 DataSourceSettings 类。我认为问题是 ISettings 在注入 DataSourceSettings 类之前得到解决,因此 Ninject 不使用我想要的绑定。有没有办法解决这个问题。我还没有找到任何东西。
【问题讨论】:
-
在我看来,您的设计有些模棱两可。
ISettings是模棱两可的。为什么不定义两个单独的接口,而不是让自己很难进行条件注入,因为DataSourceOne显然期望与系统的其余部分不同。
标签: ninject