如何使用简单的注入器在运行时将值传递给实例集合的构造函数?
How can i pass a value to constructors of collection of instances at runtime with simple injector?
我知道我可以将值传递给单个实例:
container.Register(() => new Service(value));
但我想使用程序集集合注册实例集合,如下所示:
container.RegisterCollection<IService>(assemblies);
所有实例都具有相同的构造函数签名。如何将值传递给所有构造函数?
更新
由于史蒂文的评论,我应该澄清我想传递的值是 CancellationToken
。
你能用一个简单的 foreach 循环来完成这个吗?此代码未经测试...
Collection<IService> myServices = new Collection<IService>();
myServices.Add(service1);
myServices.Add(service2);
foreach (IService svc in myServices)
{
container.Register(svc);
}
依赖原始值不是一个好主意。服务应该依赖于抽象。创建一个新接口来描述提供必要值的服务,并让实例依赖于它。如果不同的实例需要不同的值,它们应该依赖于单独的接口来提供值。 This answer 提供了更多详细信息,并举例说明了如何实现您正在尝试做的事情。
我知道我可以将值传递给单个实例:
container.Register(() => new Service(value));
但我想使用程序集集合注册实例集合,如下所示:
container.RegisterCollection<IService>(assemblies);
所有实例都具有相同的构造函数签名。如何将值传递给所有构造函数?
更新
由于史蒂文的评论,我应该澄清我想传递的值是 CancellationToken
。
你能用一个简单的 foreach 循环来完成这个吗?此代码未经测试...
Collection<IService> myServices = new Collection<IService>();
myServices.Add(service1);
myServices.Add(service2);
foreach (IService svc in myServices)
{
container.Register(svc);
}
依赖原始值不是一个好主意。服务应该依赖于抽象。创建一个新接口来描述提供必要值的服务,并让实例依赖于它。如果不同的实例需要不同的值,它们应该依赖于单独的接口来提供值。 This answer 提供了更多详细信息,并举例说明了如何实现您正在尝试做的事情。