文档说我们应该使用它以便在 .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<>)));
- 1 回答
- 0 关注
- 99 浏览
添加回答
举报
0/150
提交
取消