#.net #dependency-injection #inversion-of-control #unity-container #constructor-injection
#.net #внедрение зависимостей #инверсия управления #unity-контейнер #конструктор-инъекция
Вопрос:
Unity InjectionConstructor
хорошо работает, когда вам нужно вызвать определенный конструктор, потому что вы имеете в виду очень специфические зависимости (например, любое сочетание внешних зависимостей, именованных регистраций или безымянных регистраций), но для этого требуется указать все параметры.
Есть ли какой-нибудь способ дополнить Unity «найти и использовать конструктор с наибольшим количеством параметров» с помощью «найти и использовать конструктор с наибольшим количеством параметров, которые также могут принимать экземпляр IX
где-то в подписи»?
Комментарии:
1. Я не знаю, что вы можете сделать что-то подобное напрямую, но, возможно, вы могли бы получить результат от InjectionConstructor и переопределить его
AddPolicies
метод?2. Если вы можете, предотвратите дизайн, в котором ваши классы обслуживания имеют более одного общедоступного конструктора. Это делает дизайн намного чище и, как побочный эффект, более удобным для DI.
3. @Steven — полностью согласен. На самом деле у меня есть только один в этом случае. Я думаю, что увеличение было неправильным словом. Возможно, сказать, что мне нужно что-то среднее между явным (
InjectionConstructor
) и неявным (не используемымInjectionConstructor
вообще), имеет больше смысла.
Ответ №1:
Комментарий Марка послужил основой для ответа. А именно, реализация AddPolicies
- должен найти конструктор, который соответствует всем значениям (явным) Я перехожу в конструктор
InjectionConstructor
. Существуют ограничения (например, если значения равны нулю или они сопоставляются с супертипом в конструкторе), и - для оставшихся (неявных) используйте контейнер для их разрешения.
Я не говорю, что это хорошо. В конечном итоге я использовал RegisterInstance
его в другом месте, и необходимость в смешанных параметрах исчезла. Но это решение для тех, кому оно может понадобиться.