Знакомлюсь с 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());
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не пойму из за чего может возникать ошибка при попытке отправить POST запросПри попытке отправить POST запрос возникает такая ошибка: Array ( [state]...
У buddypress есть два способа нотификации - системные сообщения и почтаМне нужно добавить ещё один способ: смс