Я рассматриваю контекстную привязку с помощью Ninject. Это на тот случай, если у вас есть несколько реализаций некоторой абстракции, и контекст в целевом классе внедрения определяет, какая из этих реализаций внедряется.
В документации пример с использованием «именованных привязок» выглядит так:
Bind<IWeapon>().To<Shuriken>().Named("Strong");
Bind<IWeapon>().To<Dagger>().Named("Weak");
class WeakAttack {
readonly IWeapon _weapon;
public WeakAttack([Named("Weak")] IWeapon weakWeapon){
_weapon = weakWeapon;
}
public void Attack(string victim){
Console.WriteLine(_weapon.Hit(victim));
}
}
Это означает, что сборка, содержащая WeakAttack
, очевидно, должна будет ссылаться на Ninject, чтобы использовать NamedAttribute
в конструкторе. Цель внедрения зависимостей не должна знать, какой контейнер внедрения зависимостей используется. Что мне здесь не хватает?