gpt4 book ai didi

c# - 将参数从复合根向下传递到 DI 链

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

我正在开发一个几乎没有依赖注入(inject)的项目,我想开始逐步添加它。

为了测试它,我想公开一个 API 端点,获取调用客户端传递给 API 方法的参数,创建组合根,然后将参数传递到链中。我使用的 IoC 容器是 Autofac。

我的问题基本上是从组合根将运行时参数传递给已解析服务的构造函数(API 使用者传递的参数)的最佳方式是什么?还假设每个构造函数都接受传递给 API 的参数,我如何通过所有服务的构造函数将参数向下传递到链中?

我在搜索答案时看到的答案涉及通过工厂。所以我会有这样的东西:

class Example
{
private readonly ISftpClientFactory _clientFactory;

public Example(ISftpClientFactory injectedFactory)
{
_clientFactory = injectedFactory;
}

public void DoTheWork()
{
var client = _clientFactory.GetClient(host, userName, password, timeout);
}
}

这个答案的问题是,我不知道DoTheWork中传递给GetClient的字符串参数,应该是通过构造函数从从 API 方法获取参数的组合根。

我在工厂看到的其他解决方案似乎总是在全局存储中(例如在文本框或 session 中)提供可用信息。在我的例子中,我可以将参数保存在另一个类中,然后创建一个工厂以从该存储中检索,然后将该工厂向下传递,但这似乎有点矫枉过正并破坏了封装。

问题可以是

最佳答案

Composition Root不必处理运行时数据。它只处理固定的配置值和组件的构造。如更详细的描述here ,运行时数据应该“流过”已经实例化的对象图的方法和属性:

Don't inject runtime data into application components during construction; it causes ambiguity, complicates the composition root with an extra responsibility and makes it extraordinarily hard to verify the correctness of your DI configuration. Instead, let runtime data flow through the method calls of constructed object graphs.

关于c# - 将参数从复合根向下传递到 DI 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491278/

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