C# 使用Lazy的Microsoft Unity 3.0 DI<;列表<;IFoo>&燃气轮机;不起作用

C# 使用Lazy的Microsoft Unity 3.0 DI<;列表<;IFoo>&燃气轮机;不起作用,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我的代码中有以下配置,其中视图配置为IWorkflowModule: dependencyContainer.RegisterType<IWorkflowModule, StartView>(); dependencyContainer.RegisterType(); 我希望将所有这些IWorkflowModule实现作为另一个类的构造函数参数。该类在模块注册后实例化 public WorkflowConfigReader(Lazy<List<IWorkflow

我的代码中有以下配置,其中视图配置为IWorkflowModule:

 dependencyContainer.RegisterType<IWorkflowModule, StartView>();
dependencyContainer.RegisterType();
我希望将所有这些IWorkflowModule实现作为另一个类的构造函数参数。该类在模块注册后实例化

  public WorkflowConfigReader(Lazy<List<IWorkflowModule>>
                                        availableWorkflowModules)
  {
      this.availableWorkflowModules = availableWorkflowModules;
  }
publicWorkflowConfigReader(惰性)
可用工作流程模块)
{
this.availableWorkflowModules=availableWorkflowModules;
}
构造函数的参数是惰性的,因为我将在稍后使用这些模块,并希望确保它们在之前已注册。我还需要他们作为一个列表,以获得所有的模块

  public WorkflowConfigReader(Lazy<List<IWorkflowModule>>
                                        availableWorkflowModules)
  {
      this.availableWorkflowModules = availableWorkflowModules;
  }
不幸的是,如果我这样做,我会得到一个空列表。我不确定,但我猜Unity不支持对未静态配置的IEnumerable进行依赖注入。这是正确的吗?有什么解决办法吗


谢谢。

当请求
列表时,您需要告诉Unity您想要什么。所以你可以这样做:

IUnityContainer container = new UnityContainer();

// Default registration if required
container.RegisterType<IWorkflowModule, StartView>();

// IEnumerable Registration 
container.RegisterType<IWorkflowModule, StartView>("WorkflowConfigReaderItem1");
container.RegisterType<IWorkflowModule, EndView>("WorkflowConfigReaderItem2");
container.RegisterType<List<IWorkflowModule>>(new InjectionFactory(c =>
    {
        return c.ResolveAll<IWorkflowModule>().ToList();
    }));