Возможно ли Unity IoC Prism получить все общие интерфейсы от модулей? - PullRequest
0 голосов
/ 08 февраля 2012

Возможно, заголовок не так понятен, или я использую неправильный механизм

Представьте себе этот сценарий

SOLUTION
|
|_ MODULE 1
   |_Factory1 (class) : IFactory (interface)
|
|_ MODULE 2
   |_Factory2 : IFactory
|
|_ SHELL
   |_List<IFactory>

Мне нужен способ, которым система может собрать все классы, которые выводятсяиз IFactory в Shell (Список).Есть ли способ сделать это?Я не планирую хотеть иметь очень большой условный список каждого класса фабрик.

Я имею в виду, что каждый модуль регистрирует свою фабрику, и так как Shell получает все это зарегистрировано.

1 Ответ

1 голос
/ 08 февраля 2012

Если ваши реализации IModule принимают контейнер в качестве параметра ctor, вы можете зарегистрировать реализацию каждого модуля IFactory в методе Initialize() модуля.

public class MyModule : IModule
{
  private readonly IUnityContainer container;
  public MyModule(IUnityContainer container)
  {
    this.container = container;
  }
  public void Initialize()
  {
    this.container.Register<IFactory, MyFactory>("MyFactory");
  }
}

public class Shell
{
  public Shell(IFactory[] factories)
  {
    // work with factories
  }
}

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

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

...