Если ваши реализации 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, который позволяет вам модульно конфигурировать конфигурацию контейнера для каждой сборки и собирать всю эту информацию из загрузчика.