C# Prism的统一IoC是否可能从模块获得所有公共接口?

C# Prism的统一IoC是否可能从模块获得所有公共接口?,c#,unity-container,prism,mef,ioc-container,C#,Unity Container,Prism,Mef,Ioc Container,也许标题不太清楚,或者我使用了错误的机制 想象一下这种情况 SOLUTION | |_ MODULE 1 |_Factory1 (class) : IFactory (interface) | |_ MODULE 2 |_Factory2 : IFactory | |_ SHELL |_List<IFactory> 解决方案 | |_单元1 |_Factory1(类):IFactory(接口) | |_单元2 |_工厂2:IFactory | |_壳 |_名单

也许标题不太清楚,或者我使用了错误的机制

想象一下这种情况

SOLUTION
|
|_ MODULE 1
   |_Factory1 (class) : IFactory (interface)
|
|_ MODULE 2
   |_Factory2 : IFactory
|
|_ SHELL
   |_List<IFactory>
解决方案
|
|_单元1
|_Factory1(类):IFactory(接口)
|
|_单元2
|_工厂2:IFactory
|
|_壳
|_名单
我需要一种方法,使系统能够将从Shell中的IFactory派生的所有类集合在一起(列表)。有办法做到这一点吗?我不想有一个超大的每类工厂的条件列表


我的意思是,类似于每个模块注册其工厂的方式,并且由于Shell注册了所有这些工厂。

如果您的
IModule
实现将容器作为ctor参数,那么您可以在模块的
Initialize()
方法中注册每个模块的
IFactory
实现

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
  }
}
公共类MyModule:IModule
{
专用只读IUnityContainer容器;
公共MyModule(IUnityContainer容器)
{
this.container=容器;
}
公共无效初始化()
{
本.容器.登记册(“MyFactory”);
}
}
公共类外壳
{
公共壳牌(IFactory[]工厂)
{
//与工厂合作
}
}

我认为模块是基础设施的一部分,而不是应用程序本身,因此我认为引用模块内部的容器是可以接受的。然而:如果你想离开统一,你必须改变代码


如果您不想以这种方式使用
模块
,可以查看。它包含一个增强的Unity配置引擎,允许您模块化每个程序集的容器配置,并从引导程序收集所有信息。

@DarfZon您到底想添加什么?当我编辑答案时,我把最后一段附在后面。没有任何东西被移除。