Unity Framework и внедрение нескольких конструкторов - PullRequest
3 голосов
/ 29 декабря 2011

У меня есть класс в качестве зависимости:

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

    public Foo(IMyInterface my) {
    }
}

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 29 декабря 2011

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

2 голосов
/ 31 мая 2012

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

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