ASP 中静态方法的依赖注入网络核心

共1个回答, 标签: c# asp.net-core dependency-injection

我已经在启动中注册了我的记录器在服务收集中的实现

服务.AddTransient (ILogger <>) 、 type of (GenericLogger <>);

通常,我这样做是为了使用构造函数注入

动态事件处理器
{
私人只读 IRepository _ 数据库;
私人只读 IDogStatsd _ dogStatsd;
私人只读 ILogger _ 记录器;

公共 DynamoEventProcessor (IRepository 储存库,IDogStatsd dogStatsd,ILogger 记录器)
{
_ 数据库 = 库;
_ DogStatsd dogStatsd =;
_ 记录器 = 记录器;
}
}

但是我有一个没有构造函数的类,

公共课程简介
{
公共内存流内容 {get; set;}
公共字符串内容算法 {get; set;}
公共列表> 数据键 {get; set;}
公共长时间过期 {get; set;}
公共长版本 {get; set;}
公共长删除 {get; set;}

公共静态字典 GetEncryptedDataAndKeys (
字典> 配置文件内容属性)
{
日志信息 (“可用键:” KeysAsString (keyList));
_ Logger.LogInformation ("account missing 缺少 Coporate 数据:" _ converter.getvalue fromattributevalue (属性 ["account tid"]).
新字典 ();
Foreach (配置文件内容属性中的 var 项)
{
添加 (item.Key,GetEncryptedDataAndKey (item.Value));
}

返回加密数据和密钥;
}

}

由于 null,我的 _ logger 在这里失败了。我理解这个问题,我没有正确地注入它。当我在静态方法中使用它而不实例化对象时,我如何注入它?

第1个答案

不能注入静态构造函数。你有几个选择:

  1. 通过ILogger希望调用代码已经注入到方法中。

月) 有一个静态特性的ILoggerProfileContent然后在你的启动文件,在配置方法,初始化它,即

ProfileContent。记录 = app.ApplicationServices。GetService> ();

然后使用记录器在你的静态方法。就我个人而言,我会选择选项 1。

相关问题

什么是 Null 引用异常, 以及如何修复它? 什么是 Null 引用异常, 以及如何修复它? 如何将 bool 更改为0或 1, 我可以将其转换为0或1? 。Net Core 3.0 json序列化程序填充现有对象 Net Core: 为 AppService 、存储库等执行 Xunit 测试中的所有依赖注入 需要时获得依赖关系? 如何通过 spring 容器解决循环依赖关系 ASP 中静态方法的依赖注入网络核心 从不同的模块为同一令牌动态注入不同的服务实例