c# - 将一个参数传递给依赖注入类的构造函数,它也将具有依赖注入参数
问题描述
我正在将 .net 框架转换为 .net 5.0 并使用 .net 5.0 中的内置依赖注入,而不是我在 .net 框架中使用的 Ninject 库。
我有以下构造函数,它接受一个 messageHandler(通过依赖注入)以及一个 Web 服务根地址:
(旧) 1.
public ApiConnection(HttpMessageHandler messageHandler, string webServiceRootAddress)
以下是 .net 框架中通过 ninject 进行依赖注入的设置:
(旧) 2。
kernel.Bind<IApiConnection>().To<ApiConnection>().InSingletonScope()
.WithConstructorArgument(
"webServiceRootAddress",
ConfigurationManager.AppSettings["webServiceRootAddress"]);
(旧) 3.
kernel.Bind<HttpMessageHandler>().To<HttpClientHandler>();
我想在启动文件中的 .net 5 中的内置依赖注入中设置上述内容。
我目前有以下内容:
(新的不起作用) 4.
services.AddSingleton<IApiConnection, ApiConnection>(s =>
new ApiConnection(Configuration.GetSection("Address")
.GetSection("webServiceRootAddress").Value));
(新) 5.
services.AddScoped<HttpMessageHandler, HttpClientHandler>();
但是上面期望将 2 个参数传递给构造函数。如何在这里只定义一个要传入的构造函数参数,因为 HttpMessageHandler 参数将通过依赖注入(第 5 行)传入。
解决方案
有几个选项,这里有几个。
使用
s
参数获取服务:services.AddSingleton<IApiConnection, ApiConnection>(s => { var rootAddress = Configuration.GetSection("Address") .GetSection("webServiceRootAddress") .Value; var messageHandler = s.GetRequiredService<HttpMessageHandler>(); return new ApiConnection(messageHandler, rootAddress ); });
传入一个获取根地址的服务/类:
public class MyConfig { public string WebServiceRootAddress { get; set; } }
将服务添加到您的 DI 容器:
services.Configure<MyConfig>(Configuration.GetSection("Address") .GetSection("webServiceRootAddress"));
现在修改您的
ApiConnection
服务以使用类而不是字符串:public ApiConnection(HttpMessageHandler messageHandler, MyConfig myConfig) { var webServiceRootAddress = myConfig.WebServiceRootAddress; }
推荐阅读
- python - ValueError:收到的“数据”属性无效元素
- macos - fpm 已安装,但无法在 Mac Mojave 上运行
- django - Django Rest 框架抛出 IntegrityError。“creator_id”列中的空值违反非空约束
- r - 在 R 潜在变量分析中理解问题并得到错误 Lavaan 包
- api - 在小酒馆中出现错误“预计此文件中只有一个文档,但发现多个”
- c# - 如何在 C# 中使用 Microsoft Graph 库使用 $value
- swiftui - 形状不会重绘自身
- php - 在存档页面上显示产品的自定义字段值
- snowflake-cloud-data-platform - 如何获取特定用户的数据库列表
- javascript - 带有 Gatsby js 的 Scrollmagic 和部署时未定义的窗口