2011-12-29 2 views
3

У меня есть класс, как зависимость:Unity Framework и несколько Конструкторы Injection

public class Foo { 
    public Foo() { 
     // default constructor 
    } 

    public Foo(IMyInterface my) { 
    } 
} 

Когда я попытался внедрить его в другой класс, я получил сообщение об ошибке, как

Постановление зависимости не удалось. ..... InvalidOperationException - Текущий тип, IMyInterface, является интерфейсом и не может быть построен . Вам не хватает картографирования типов?

Я никогда не регистрировал IMyInterface с любым конкретным типом, потому что резервирую этот конструктор для других целей.

С моим пониманием, Unity попытается сначала разрешить конструктор с наименьшими параметрами, если не дать ясного указания, какой из них решить. Поэтому он попытается инициализировать конструктор по умолчанию.

Другие, чем я использую InjectionConstructorAttribute, есть ли разумный способ, который я могу сказать Unity игнорировать второй конструктор?

ответ

3

Все наоборот. Единство попытается сначала разрешить конструктор с параметрами MOST. Вы можете использовать атрибут InjectionConstructor над одним из ваших конструкторов, чтобы сообщить единство, чтобы предпочесть этот конструктор над другими.

+0

Благодарит за исправление моей неправильно памяти. – hardywang

2

Вы можете указать в настройках, что конструктор нулевого параметра должен быть использован:

<register type="IFoo" mapTo="Foo"> 
    <lifetime type="external"/> 
    <constructor /> 
</register>