首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过调用LoggerFactory.CreateLogger注入泛型Logger<T>

如何通过调用LoggerFactory.CreateLogger注入泛型Logger<T>
EN

Stack Overflow用户
提问于 2017-10-20 13:57:12
回答 2查看 3K关注 0票数 3

我正在开发一个ASP.NET MVC应用程序。

我在从Global.asax调用的静态类中初始化了我的LoggerFactory

using Microsoft.Extensions.Logging;
using Serilog;
using System.IO;

namespace web
{
    public static class LogConfig
    {
        public static LoggerFactory LoggerFactory = new LoggerFactory();

        public static void RegisterLogger()
        {
            LoggerFactory = new LoggerFactory();
            Log.Logger = new LoggerConfiguration().MinimumLevel.Debug().WriteTo.RollingFile(Path.Combine("", "log-{Date}.txt")).CreateLogger();
            LoggerFactory.AddSerilog();
        }
    }
}

现在我想使用inject将ILogger的一个实例注入到我的构造函数中。

在我的构造函数中,我有:

private ILogger<MyTypeController> _logger;

public MyTypeController(ILogger<MyTypeController>) 
{
    // This works fine but I want to inject it
    _logger = LogConfig.LoggerFactory.CreateLogger<MyTypeController>();
}

上面的代码可以工作,但是我想使用inject来注入它...这是我尝试过的,但甚至不能编译:

kernel.Bind(typeof(ILogger<>)).ToProvider(LogConfig.LoggerFactory.CreateLogger<>());
EN

回答 2

Stack Overflow用户

发布于 2018-04-11 18:10:56

我使用NLog执行以下操作,但它也可能适用于Ninject:

var createLoggerMethod =
    typeof(LoggerFactoryExtensions).GetMethod(nameof(LoggerFactoryExtensions.CreateLogger),
        new[] {typeof(ILoggerFactory)});
kernel.Bind(typeof(ILogger<>)).ToMethod(context =>
{
    var createLoggerGeneric = createLoggerMethod.MakeGenericMethod(context.GenericArguments);
    var logger = createLoggerGeneric.Invoke(null, new []{ loggerFactory });
    return logger;
});
票数 8
EN

Stack Overflow用户

发布于 2019-02-01 14:13:58

读了@Steven给出的评论,也读了他在Simple Injector上的博客,我意识到注入一个通用的日志记录器ILogger<T>并不是一个好方法。

有关更多详细信息,请参阅this answer

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46843110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档