gpt4 book ai didi

c# - 如何将参数传递给依赖项通过 IoC 容器连接的类?

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:48 25 4
gpt4 key购买 nike

我有一个类通过多个资源与网络一起工作。它的构造函数接收由 IoC 容器 (StructureMap) 在运行时解析的参数:

public NetworkWorker(IRetryService retryService, ILog log)
{ ... }

我需要的是控制此类在用例级别上使用的资源数量 - 例如,客户端 A 需要一次只允许一个操作的 NetworkWorker 实例,而客户端 B 一次需要 10 个操作。
目前这个数字在构造函数中是硬编码的。我看到的唯一方法是添加一个方法 void Configure(int resourceCount),NetworkWorker 的每个客户端将使用不同的值调用该方法。
或者可能有更好的方法我没有看到?
此类可以做不同的事情,但每个方法调用(Get/Send/etc 方法)都需要一定数量的资源。
附言这是一种已知技术(使用 Configure 方法)吗?如果是,它的名字是什么?类似于“两步初始化”?

最佳答案

我假设这个 NetworkWorker 有多个方法(否则你可以只向那个方法添加一个参数)。

你可以使用工厂模式:

public interface INetworkWorkerFactory
{
NetworkWorker Create(int numberOfResources);
}

public class NetworkWorkerFactory : INetworkWorkerFactory
{
private readonly IContainer _container;
public NetworkWorkerFactory(IContainer container)
{
_container = container;
}

public NewtorkWorker Create(int numberOfResources)
{
var retryService = _container.GetInstance<IRetryService>();
var log = _container.GetInstance<ILog>();

return new NewtorkWorker(retryService, log, numberOfResources);
}
}

(或者简单地注入(inject)所需的依赖项而不是容器)然后简单地

private readonly INetworkWorkerFactory _networkWorkerFactory;

public C(INetworkWorkerFactory networkWorkerFactory)
{
_networkWorkerFactory = networkWorkerFactory;
}

public void M()
{
var networkWorker = _networkWorkerFactory.Create(10);
}

关于c# - 如何将参数传递给依赖项通过 IoC 容器连接的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37829360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com