я следующие привязок объявленныеNinject проблемы Условный инъекции
Bind<IDataSource>().To<DataSourceOne>();
Bind<ISettings>().To<DataSourceSettings>
.WhenInjectedInto<DataSourceOne>();
Bind<ISettings>().To<Settings>();
теперь я называю
Kernel.Get<IDataSourc>();
Ninject правильно впрыскивает DataSourceSettings, но мне нужно передать аргумент конструктора для настройки и DataSourceSettings, основанный на данные из файла конфигурации. поэтому я изменил IDataSouce связывания следующего
Kernel.Bind<IDataSource>().To<DataSourceOne>()
.WithConstructorArgument("settings", Kernel.Get<ISettings>(
new ConstructorArgument("data", objectContainingConfigFileData)
)
);
в этом случае Ninject впрыскивает Настройки класса вместо класса DataSourceSettings. Я предполагаю, что проблема заключается в том, что ISettings становится разрешенным до того, как он будет введен в класс DataSourceSettings, поэтому Ninject не использует привязку, на которую я ее намеревался. Есть ли способ обойти это. Я еще ничего не нашел.
Мне кажется, что у вас есть некоторая двусмысленность в вашем дизайне. 'ISettings' неоднозначен. Вместо того, чтобы усложнять время условной инъекцией, почему бы не определить два отдельных интерфейса, так как «DataSourceOne» явно ожидает чего-то другого, чем остальная система. – Steven