Пользователь ILogger <T>с Caliburn.Micro SimpleContainer - PullRequest
1 голос
/ 14 января 2020

У меня есть приложение WPF. net -core 3, и я пытаюсь использовать Microsoft ILogger<T> с системой внедрения зависимостей Caliburn.Micro, но я не знаю, как зарегистрироваться в SimpleContainer универсальном c ILogger.

То, что я до сих пор делал, это создание ILoger из 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, но это будет означать перефакторинг всех библиотек классов, чтобы использовать его вместо ILogger напрямую.

...