C# Unity注册注册类型列表,通过添加N个实例解析

标签 c# unity-container

我有一个接收

的服务
 public ServiceManagement(List<IWorker> workers)

我已经注册了 worker :

this.Container.RegisterType<IWorker, Worker>

我想在解析该列表时告诉 unity 恰好创建 N 个 Worker 实例。

有人可以帮忙吗?

我尝试了以下方法:

接收数组而不是列表并像这样注册:

for (int i = 0; i < N; i++)
{
    this.Container.RegisterType<IWorker, Worker>(i.ToString());
}

但这只适用于不同的IWorker实现不一样。

提前致谢!

最佳答案

你不应该多次注册同样的东西。 你应该做的是创建你的 worker 工厂。将实例数传递给您的工厂。然后在服务构造函数中传递将创建列表的工厂,而不是列表本身。

在容器中,注册工厂,所以每当你想将不同的对象类型传递给服务时,你只需要交换工厂。

一些示例代码:

public class WorkerFactory :IFactory<IWorker>
{
public IEnumerable<IWorker> Create(int n)
{
var workers = new List<IWorker>();
for(int i = 0; i<n;i++)
workers.Add(new Worker());
return workers;
}
}

 public ServiceManagement(IFactory<IWorker> workersFactory)
{
Workers = workersFactory.Create(5);
}

关于C# Unity注册注册类型列表,通过添加N个实例解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45752218/

相关文章:

c# - 为什么这个文件用了C1ZipFile后还是删不掉?

c# - 团结与委托(delegate)

asp.net-mvc-4 - Unity.MVC4 不处理 ()

c# - 使用反射(reflect)的类型 t 实例化类

c# - SQL Server INSERT 命令不插入数据

unit-testing - Ninject 等效于 Unity RegisterInstance 方法

C# Unity - 在运行时更改具体实现

c# - 如何在 ASP.NET 中使用 IoC 容器配置单元测试?

c# - 下载带有响应的文件不显示文件大小

c# - 如何在没有等待运算符的情况下获取返回值