Разрешение типов массивов в контейнере Unity (Prism) - PullRequest
5 голосов
/ 07 февраля 2011

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

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

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

1 Ответ

7 голосов
/ 08 февраля 2011

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

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

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

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

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

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

...