为了账号安全,请及时绑定邮箱和手机立即绑定

在没有具体<T>的情况下在.Net core中注入NLOG?

在没有具体<T>的情况下在.Net core中注入NLOG?

C#
白板的微信 2023-07-22 15:53:13
文档说我们应该使用它以便在 .Net core DI 中使用 Nlog :.UseNLog();  // NLog: setup NLog for Dependency injection然后我们就可以使用 DI 了:public class HomeController : Controller{    private readonly ILogger<HomeController> _logger;    public HomeController(ILogger<HomeController> logger)    {        _logger = logger;    }}但我们不会将 ILogger 注入到我们想要登录的每个类中。我们有一个名为的服务IHelper,它依次注入Ilogger:public class Helpers : IHelpers{    private readonly ILogger _logger;    public Helpers(ILogger<Helpers> logger)    {        _logger = logger;    }}所以事实证明我们总是使用Helpersas 类型。(:/)我尝试仅注入(!)ILogger(没有类型),但出现错误。问题:有没有更好的模式可以在ILogger没有虚拟<Helpers>(在我的情况下......)类型的情况下使用?或者有没有办法不指定任何类型?
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

你可以制作IHelpers和Helpers通用。这将允许您创建一个使用类型参数名称的类别ILoggerFactory的实例。ILogger这是一个例子:


public interface IHelpers<T> { }


public class Helpers<T> : IHelpers<T>

{

    private readonly ILogger _logger;


    public Helpers(ILoggerFactory loggerFactory)

    {

        _logger = loggerFactory.CreateLogger<T>();

    }

}

要在 eg 中使用它SomeClass,请IHelpers<SomeClass>在构造函数中使用 for DI:


public class SomeClass

{

    private readonly IHelpers<SomeClass> _helpers;


    public SomeClass(IHelpers<SomeClass> helpers)

    {

        _helpers = helpers;

    }

}

最后,注册IHelpers<T>为开放通用,如下所示:


services.Add(ServiceDescriptor.Singleton(typeof(IHelpers<>), typeof(Helpers<>)));


查看完整回答
反对 回复 2023-07-22
  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信