我声明了以下绑定
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不使用我想要的绑定。有没有办法解决这个问题。我还没找到任何东西。
答案 0 :(得分:0)
如果您为ISettings绑定定义构造函数参数而不是DataSource绑定,它应该可以工作。假设您已经知道模块中包含配置文件数据的对象。否则也许工厂会更合适。
kernel.Bind<IDataSource>().To<DataSourceOne>();
kernel.Bind<ISettings>().To<DataSourceSettings>()
.WhenInjectedInto<DataSourceOne>()
.WithConstructorArgument("data", objectContainingConfigFileData);
kernel.Bind<ISettings>().To<Settings>();