c# - ASP .Net Core中静态方法的依赖注入
问题描述
我已经在启动时在 ServiceCollection 中注册了我的记录器的实现:
services.AddTransient(typeof(ILogger<>), typeof(GenericLogger<>));
通常,我这样做是为了使用构造函数注入:
class DynamoEventProcessor
{
private readonly IRepository _repository;
private readonly IDogStatsd _dogStatsd;
private readonly ILogger<DynamoEventProcessor> _logger;
public DynamoEventProcessor(IRepository repository, IDogStatsd dogStatsd, ILogger<DynamoEventProcessor> logger)
{
_repository = repository;
_dogStatsd = dogStatsd;
_logger = logger;
}
}
但是我有一个没有构造函数的类:
public class ProfileContent
{
public MemoryStream Content { get; set; }
public string ContentAlgorithm { get; set; }
public List<Dictionary<string, AttributeValue>> DataKeys { get; set; }
public long ExpiresUtc { get; set; }
public long Version { get; set; }
public long Deleted { get; set; }
public static Dictionary<string, EncryptedDataAndKeys> GetEncryptedDataAndKeys(Dictionary<string, Dictionary<string, AttributeValue>> profileContentAttributes)
{
_logger.LogInformation("Available Keys: " + KeysAsString(keyList));
_logger.LogInformation("AccountId missing Coporate Data: " + _converter.GetValueFromAttributeValue(attributes["AccountId"]).ToString());
var encryptedDataAndKeys = new Dictionary<string, EncryptedDataAndKeys>();
foreach (var item in profileContentAttributes)
{
encryptedDataAndKeys.Add(item.Key, GetEncryptedDataAndKey(item.Value));
}
return encryptedDataAndKeys;
}
}
_logger
由于null,我在这里失败了。我理解这个问题,我没有正确注入它。当我在静态方法中使用它而不实例化对象时,如何注入它?
解决方案
您不能注入静态构造函数。你有几个选择:
1.)ILogger
传入方法,希望调用代码将其注入。
2.)有一个静态属性ILogger
,ProfileContent
然后在你的Startup
文件中,在Configure
方法中,初始化它,即
ProfileContent.Logger = app.ApplicationServices.GetService<ILogger<ProfileContent>>();
然后Logger
在您的静态方法中使用。就个人而言,我会选择选项1。
推荐阅读
- python - 如何获得文本对齐?
- sql-server - 如何在 SQL SERVER 中实现 SET_DATE_PART
- javascript - 如何避免 TypeScript 中的 EventEmitter 类型错误?
- ip - IP 地址和子网掩码
- android - 无法查询属性“packageName”的值。清单文件不存在:
- .net - .Net Core API 跨站点脚本在 HttpContext.Request.Form 上
- javascript - 将 json 数组转换为对象 - Javascript
- c++ - C++ 中的递归 Collatz 函数
- c++ - 减少 C++ 中的代码重复:在略有不同的项目中使用相同的样板代码片段
- php - PHPExcel生成excel文件后,原引用出现REF错误