2011-02-07 3 views
5

Возможно ли зарегистрировать и разрешить типы массивов в контейнере Unity? Я хотел бы сделать что-то вроде этого:Разрешение типов массивов в контейнере Unity (Prism)

this.mContainer 
    .RegisterType<ISomeType, SomeType>() 
    .RegisterType<ISomeType[], SomeType[]>(); 
ISomeType[] lSomeTypes = this.mContainer.Resolve<ISomeType[6]>(); 

Было бы еще лучше, если бы у меня не было, чтобы зарегистрировать тип массива, и есть единство выяснить массив, основанный на RegisterType<ISomeType, SomeType>() и Resolve<ISomeType[]>() в одиночку.

+0

Нашел некоторую документацию, но было не очень понятно ... http://msdn.microsoft.com/en-us/library/ff660882%28v=pandp.20%29.aspx#_Toc260122621 –

ответ

7

Если вы регистрируете несколько типов для определенного типа (с использованием названных регистраций), тогда, когда контейнер видит зависимость от массива этого типа, он автоматически будет вводить все указанные имена.

Так что это будет работать:

this.mContainer 
    .RegisterType<ISomeType, SomeImpl1>("one") 
    .RegisterType<ISomeType, SomeOtherImpl>("other") 
    .RegisterType,ISomeType, AnotherImpl>("another"); 

ISomeType[] someTypes = mContainer.Resolve<ISomeType[]>(); 

Эта логика будет удар в случаях, когда есть зависимость ISomeType [] - параметр конструктора, впрыскивается свойство и т.д.

Обратите внимание, что впрыскивание массив будет только инъекционные с пометкой. Зарегистрированная по умолчанию регистрация не включена в массив.

Смежные вопросы