首页 > 解决方案 > 用户 ILogger使用 Caliburn.Micro SimpleContainer

问题描述

我有一个 .net-core 3 WPF 应用程序,我正在尝试将 MicrosoftILogger<T>与 Caliburn.Micro 依赖注入系统一起使用,但我不知道如何在SimpleContainer通用ILogger.

到目前为止,我所做的是ILoger从 a创建一个LoggerFactory

var serilog = ConfigureLogger();
ILoggerFactory loggerFactory = new LoggerFactory().AddSerilog(serilog);
ILogger logger = loggerFactory.CreateLogger("");


container.RegisterInstance(typeof(ILogger<>), nameof(Microsoft.Extensions.Logging.ILogger), logger);

        private static Serilog.ILogger ConfigureLogger()
        {
            return new LoggerConfiguration()
                .MinimumLevel.Information()
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                .MinimumLevel.Override("System", LogEventLevel.Warning)
                .Enrich.FromLogContext()
                .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Literate)
                .WriteTo.File("log.txt", rollingInterval: RollingInterval.Day)
                .CreateLogger();
        }

如果我将在视图模型中请求一个实例,这将不起作用,ILooger<MyType>因为记录器是使用空字符串作为类别名称创建的。

我应该使用反射为我的应用程序中的每种类型创建一个记录器的实例吗?这听起来不太好。

我知道我可以LoggerFactory直接在 DI 中注入 a,但这意味着要重构所有类库以使用它而不是ILogger直接使用 a。

标签: c#wpf.net-corecaliburn.micro

解决方案


推荐阅读