如何使用简单的注入器在运行时将值传递给实例集合的构造函数?

时间:2015-11-06 16:05:34

标签: .net dependency-injection inversion-of-control simple-injector

我知道我可以将值传递给单个实例:

container.Register(() => new Service(value));

但我想使用程序集集合注册一个实例集合,如下所示:

container.RegisterCollection<IService>(assemblies);

所有实例都具有相同的构造函数签名。如何将值传递给所有构造函数?

更新

由于史蒂文的评论,我应该澄清我想传递的值是CancellationToken

2 个答案:

答案 0 :(得分:1)

依赖原始价值并不是一个好主意。服务应该取决于抽象。创建一个新接口,描述提供必要值并使实例依赖于该服务的服务。如果不同的实例需要不同的值,它们应该依赖于单独的接口来提供值。 This answer提供了更多详细信息,并举例说明了如何实现您的目标。

答案 1 :(得分:0)

你能用一个简单的foreach循环来完成这个吗?此代码未经过测试......

Collection<IService> myServices = new Collection<IService>();
myServices.Add(service1);
myServices.Add(service2);

foreach (IService svc in myServices) 
{
     container.Register(svc);
}