我有一个接收
的服务 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/