猿问

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

文档说我们应该使用它以便在 .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>(在我的情况下......)类型的情况下使用?或者有没有办法不指定任何类型?


白板的微信
浏览 100回答 1
1回答

跃然一笑

你可以制作IHelpers和Helpers通用。这将允许您创建一个使用类型参数名称的类别ILoggerFactory的实例。ILogger这是一个例子:public interface IHelpers<T> { }public class Helpers<T> : IHelpers<T>{&nbsp; &nbsp; private readonly ILogger _logger;&nbsp; &nbsp; public Helpers(ILoggerFactory loggerFactory)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; _logger = loggerFactory.CreateLogger<T>();&nbsp; &nbsp; }}要在 eg 中使用它SomeClass,请IHelpers<SomeClass>在构造函数中使用 for DI:public class SomeClass{&nbsp; &nbsp; private readonly IHelpers<SomeClass> _helpers;&nbsp; &nbsp; public SomeClass(IHelpers<SomeClass> helpers)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; _helpers = helpers;&nbsp; &nbsp; }}最后,注册IHelpers<T>为开放通用,如下所示:services.Add(ServiceDescriptor.Singleton(typeof(IHelpers<>), typeof(Helpers<>)));
随时随地看视频慕课网APP
我要回答