Установка беспараметрического конструктора в качестве инжектора при создании контейнера - PullRequest
9 голосов
/ 22 декабря 2009

У меня есть класс с двумя ctors. Один без параметров и один с параметрами.
Unity по умолчанию будет использовать подход gready и перейдет к последнему ctor.

Как я могу определить, какой ctor использовать (я хочу без параметров) без добавления зависимости от Unity в моих классах? Я думаю, что это возможно сделать при создании моего контейнера, но я не знаю как.

В настоящее время моя регистрационная запись выглядит так:

container.RegisterType<IConfigurationService, SqlConfigurationService>()

UPDATE
Я стараюсь максимально избегать программирования на XML (файл конфигурации).

EXTRA
Как зарегистрировать конструктор с одним параметром (который, в свою очередь, должен быть введен)?
Скажем, ILoggerService уже зарегистрирован, и я хотел бы использовать конструктор

public SqlConfigurationService(ILoggerService logger){}

Ответы [ 3 ]

19 голосов
/ 22 декабря 2009

У меня сейчас нет Unity, но, насколько я помню, вы можете сделать что-то вроде этого:

container.RegisterType<IConfigurationService, SqlConfigurationService>(
    new InjectionConstructor())
0 голосов
/ 22 декабря 2009

Вы можете применить атрибут InjectionConstructor к конструктору, который вы хотите использовать. Однако это приводит к тому, что некоторые конфигурации контейнеров перемещаются далеко от центрального места.

0 голосов
/ 22 декабря 2009

Я думаю, вы также можете передать InjectionConstructor (включая ResolvedParameter<T> s для параметров) при регистрации. Вы пробовали это?

...