gpt4 book ai didi

c# - 如何在静态类中使用 NLog,其中所有其他内容都与 Autofac 连接

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

我的 MVC 应用程序与 Autofac 连接。我还配置了 NLog,它在我的 Controller 类中按预期工作。我的 nLogger 注册如下:

var builder = new ContainerBuilder();
builder.RegisterGeneric(typeof(LoggerService<>))
.As(typeof(ILoggerService<>)).SingleInstance();
var container = builder.Build();

ILoggerService 的构造函数是:

public LoggerService()
{
SourceClass = typeof (T).FullName;
Logger = LogManager.GetLogger(SourceClass);
}

现在我也有很多我使用的静态助手类。例如:

public static class Helper
{
public static string GenerateQrBitmap(string secret, string issuer, string userEmail)
{
...
}
}

但我也希望能够在这些 Helper 类中使用记录器。

最佳答案

这就是为什么 static 类不是很好的原因之一。

你有两个选择:

  1. 使它们不是static(并使用 Autofac 注册它们)并采取ILoggerService 作为构造函数参数。
  2. 改变他们的方法(例如 GenerateQrBitmap)将 ILoggerService 作为参数。

我建议前者。

另一种方法是使用Service Locator 模式- 并让Helper 直接针对容器进行解析。我不会向您展示如何执行此操作,因为我不推荐这样做。它使代码更难进行单元测试,并且隐藏了您的依赖项。但是,如果您 Google Autofac Service Locator static class c#,我相信您会解决的。

关于c# - 如何在静态类中使用 NLog,其中所有其他内容都与 Autofac 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032080/

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