2013-09-12 7 views
0

Я знаю, что с Ninject 1 можно было указать конкретные экземпляры в зависимости от имени параметра.Ninject v2 + injection зависит от имени параметра

например общественное SomeClass (ISomething слева, ISomething справа) {}

разрешило бы ISomething слева ISomething по умолчанию, но ISomething право на другое связывание.

Как это сделать с помощью Ninject 2+?

Примечание: Я не хочу использовать [Именованный («XZ»)], потому что это заставило бы меня сделать главную dll моего приложения зависимой от Ninject. Прямо сейчас у меня есть отдельная DLL CompositionRoot, которая зависит от Ninject, и ничего больше: моя главная dll может использоваться без Ninject. Я хотел бы сохранить его таким образом.

Редактировать: Я обновил пример использования влево/вправо вместо простого/сложного после первого ответа. Я не хочу жестко указывать эту зависимость в моей структуре наследования.

ответ

3

Я понял это:

Bind<ISomething >().To<LeftSomething>().When(a => a.Target.Name == "left"); 
2

Почему вы не создаете производные интерфейсы ISimpleSomething и IComplexSomething?

Таким образом, вы можете предоставить дополнительную функциональность для каждого.

interface ISomething { ... } 
interface IComplexSomething : ISomething { ... } 
interface ISimpleSomething : ISomething { ... } 
+0

Потому что я не хочу, чтобы изменить свою структуру наследования класса только для удовлетворения Ninject. Может быть, мой пример был плохим, это может быть также ISomething left, ISomething right; Я не хочу хардкор ISomethingRight ... – Wilbert

Смежные вопросы