gpt4 book ai didi

c# - ASP .Net Core 中静态方法的依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-05 08:40:19 26 4
gpt4 key购买 nike

我已经在启动时在 ServiceCollection 中注册了我的记录器的实现:

services.AddTransient(typeof(ILogger<>), typeof(GenericLogger<>));

通常,我这样做是为了使用 Constructor 注入(inject):

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 在这里失败了。我明白这个问题,我没有正确注入(inject)它。在没有实例化对象的静态方法中使用时如何注入(inject)?

最佳答案

您不能注入(inject)静态构造函数。您有几个选择:

1.) 将 ILogger 传递到方法中,希望调用代码已将其注入(inject)。

2.) ProfileContent 上的 ILogger 有一个静态属性,然后在 Startup 文件中的 Configure 方法,初始化它即

ProfileContent.Logger = app.ApplicationServices.GetService<ILogger<ProfileContent>>();

然后在您的静态方法中使用 Logger。就个人而言,我会选择选项 1。

关于c# - ASP .Net Core 中静态方法的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56333307/

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