Я использую Serilog в своем приложении для ведения журнала. Когда я настройка регистратора, у меня есть такой код:Как передать зависимость Serilog Enricher?
var log = new LoggerConfiguration()
.Enrich.With<MySerilogEnricher>()
.ReadAppSettings()
.CreateLogger();
Я хочу, чтобы ввести некоторую зависимость в мой MySerilogEnricher
класс, но когда я пытаюсь, я получаю эту ошибку компилятора:
error CS0310: 'SerilogEnricher' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TEnricher' in the generic type or method 'LoggerEnrichmentConfiguration.With()'
Я понимаю, почему я получаю эту ошибку, но я не вижу в ней легкого пути. В идеале, было бы WithInstance
вызова, который я мог бы использовать так:
var instance = new MySerilogEnricher(myDependency);
var log = new LoggerConfiguration()
.Enrich.WithInstance<MySerilogEnricher>(instance)
.ReadAppSettings()
.CreateLogger();
Есть ли способ передать зависимость к MySerilogEnricher
? Возможно, у меня может быть класс с MySerilogEnricher и передать ему зависимость в свойстве, но это кажется беспорядочным.
Но что, если моя зависимость не является синглом, допустим, это служба, зарегистрированная в контейнере с ограниченным сроком действия или временным временем жизни? –
В этом конкретном примере, я думаю, вам потребуется Serilog для интеграции с вашим контейнером DI. Например, Serilog имеет интеграцию с Autofac: https://github.com/nblumhardt/autofac-serilog-integration – rmc00