Ninject, заменить реализацию на другой класс

344
13 августа 2021, 21:30

Знакомлюсь с 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>();
Answer 1

Если нужно подменить одну реализацию на другую, не затрагивая при этом существующий модуль, то есть два варианта.

Можно открепить абстракцию и прикрепить другую реализацию где-то сразу после инициализации ядра:

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());
READ ALSO
C# как изменить цвет фигуры

C# как изменить цвет фигуры

Есть форма с кодом:

130
Из за чего возникает ошибка Unrecognized token &#39;storeId&#39;: was expecting (&#39;true&#39;, &#39;false&#39; or &#39;null&#39;) при попытке отправить POST запрос через CURL?

Из за чего возникает ошибка Unrecognized token 'storeId': was expecting ('true', 'false' or 'null') при попытке отправить POST запрос через CURL?

Не пойму из за чего может возникать ошибка при попытке отправить POST запросПри попытке отправить POST запрос возникает такая ошибка: Array ( [state]...

131
Laravel посредники

Laravel посредники

Задача:

286
buddypress: ещё один способ нотификации

buddypress: ещё один способ нотификации

У buddypress есть два способа нотификации - системные сообщения и почтаМне нужно добавить ещё один способ: смс

278