C# 使用Lazy的Microsoft Unity 3.0 DI<;列表<;IFoo>&燃气轮机;不起作用
我的代码中有以下配置,其中视图配置为IWorkflowModule: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
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();
}));