0

我声明了以下绑定

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

4

1 回答 1

0

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

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

kernel.Bind<ISettings>().To<Settings>();
于 2013-10-28T16:08:29.437 回答