Инъекция конструктора с помощью Func on Ninject

66
8

Я использую модуль Ninject для привязки разных типов к соответствующим интерфейсам.


Инъекция будет выполняться внутри конструктора класса. Проблема состоит в том, что класс имеет другой конструктор с сигнатурой, включающей Func.


Ninject запутан и бросает это на меня:


Ошибка активации ClassTest с использованием неявной самообучения ClassTest. У нескольких конструкторов одинаковый приоритет. Укажите конструктор с использованием синтаксиса ToConstructor или добавьте атрибут Inject.



См. ниже, как выполняется привязка и как я делаю инъекцию:


this.Bind<InterfaceA>().To<ClassA>();
...

public class ClassTest
{
public ClassTest(InterfaceA a)
{
}

public ClassTest(Func<ClassB> funcB)
{
}
}

...
var giveMeTest = kernel.Get<ClassTest>(); // exception thrown
}


Кажется, что Func является виновником здесь, не могли бы вы объяснить мне, почему Ninject запутался?


Спасибо

спросил(а) 2012-02-25T01:13:00+04:00 8 лет, 3 месяца назад
1
Решение
113

Лучше всего удалить все неиспользуемые конструкторы. Нет причин добавлять конструкторы, которые никогда не используются. Если вам действительно нужны несколько конструкторов, тогда вы должны указать Ninject, который выбрать, например:

Bind<ClassTest>().ToConstructor(x => new ClassTest(x.Inject<InterfaceA>())).Named("A");
Bind<ClassTest>().ToConstructor(x => new ClassTest(x.Inject<Func<ClassB>>())).Named("B");

kernel.Get<ClassTest>("A");
kernel.Get<ClassTest>("B");

ответил(а) 2012-02-25T02:20:00+04:00 8 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема