Знакомлюсь с IoC контейнерами и Ninject. По примерам в сети сделал реализацию для Ninject. Но как теперь мне выделить для объекта, скажем, не YandexTranslator, а TestTranslator? Создавать ещё один подобный конфиг-модуль, где будет уже TestTranslator вместо YandexTranslator, а после использовать этот конфиг для нового объекта IKernel?
Имеется ли более красивый способ подставлять другие классы с помощью Ninject?
class TranslatorConfigModule : NinjectModule
{
public override void Load()
{
Bind<ITranslatorType>().To<YandexTranslator>();
Bind<IFilterInputText>().To<FilterLowerCase>();
}
}
Создание объекта с помощью Ninject
IKernel ninjectKernel = new StandardKernel(new TranslatorConfigModule());
Translator translator = ninjectKernel.Get<Translator>();
Если нужно подменить одну реализацию на другую, не затрагивая при этом существующий модуль, то есть два варианта.
Можно открепить абстракцию и прикрепить другую реализацию где-то сразу после инициализации ядра:
IKernel ninjectKernel = new StandardKernel(new TranslatorConfigModule());
ninjectKernel.Unbind<ITranslatorType>();
ninjectKernel.Bind<ITranslatorType>().To<TestTranslator>();
Translator translator = ninjectKernel.Get<Translator>();
Либо создать новый модуль, который наследует существующий и подменяет реализацию только для одной необходимой абстракции
class TestTranslatorConfigModule : TranslatorConfigModule
{
public override void Load()
{
base.Load();
Unbind<ITranslatorType>();
Bind<ITranslatorType>().To<TestTranslator>();
}
}
и, соответственно, использовать его вместо существующего при инициализации ядра
IKernel ninjectKernel = new StandardKernel(new TestTranslatorConfigModule());
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости