Внедрить зависимость как от зарегистрированного типа, так и от конкретного объекта в конструктор с Unity - PullRequest
2 голосов
/ 27 января 2011

У меня есть класс MyClass со следующим конструктором:

public MyClass(IRepository repository, AnotherClass anObject) { ... }

Интерфейс IRepository регистрируется при запуске приложения в Unity 2 для сопоставления с конкретным классом:

IUnityContainer container = new UnityContainer();
container.RegisterType<IRepository, MyConcreteRepository>();

Теперь конкретный экземпляр второго параметра конструктора всегда отличается в зависимости от контекста приложения.Поэтому я не могу зарегистрировать AnotherClass в качестве конкретного экземпляра при запуске, и нет смысла позволять Unity создавать объект этого класса с его конструктором по умолчанию, что произойдет, если я вызову:

container.Resolve<MyClass>()

Это разрешаетна new MyClass(new MyConcreteRepository(), new AnotherClass()).

То, что я ищу, если у меня есть какой-то конкретный объект anObject типа AnotherClass, это способ сказать Unity разрешить MyClass до

new MyClass(new MyConcreteRepository(), anObject)

без постоянной регистрации экземпляра anObject в контейнере.

Возможно ли это и как?

Заранее спасибо за помощь!

1 Ответ

3 голосов
/ 27 января 2011

Вы можете использовать ParameterOverride:

var myClass = container.Resolve<MyClass>(new ParameterOverride("anObject", anObject));

В случае, если неясно, учитывая имена, используемые в примере, это назначает объект anObject параметру с именем "anObject" в конструкторе MyClass.

...