Ninject条件注入问题

时间:2013-10-26 18:47:06

标签: ninject

我声明了以下绑定

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不使用我想要的绑定。有没有办法解决这个问题。我还没找到任何东西。

1 个答案:

答案 0 :(得分:0)

如果您为ISettings绑定定义构造函数参数而不是DataSource绑定,它应该可以工作。假设您已经知道模块中包含配置文件数据的对象。否则也许工厂会更合适。

kernel.Bind<IDataSource>().To<DataSourceOne>();
kernel.Bind<ISettings>().To<DataSourceSettings>()
   .WhenInjectedInto<DataSourceOne>()
   .WithConstructorArgument("data", objectContainingConfigFileData);

kernel.Bind<ISettings>().To<Settings>();