2016-10-03 5 views
3

로깅을 위해 응용 프로그램에서 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()'

을 왜이 오류가 발생하는지 이해하지만 주변을 쉽게 찾을 수는 없습니다. MySerilogEnricher에 대한 종속성을 통과 할 수있는 방법이

var instance = new MySerilogEnricher(myDependency); 
var log = new LoggerConfiguration() 
    .Enrich.WithInstance<MySerilogEnricher>(instance) 
    .ReadAppSettings() 
    .CreateLogger(); 

있습니까 : 이상적으로, 나는 다음과 같이 사용할 수있는 WithInstance 전화가있을 거라고? 아마 MySerilogEnricher 클래스를 가지고 속성에 종속성을 전달할 수는 있지만 엉망이됩니다.

답변

4

제네릭없이 .With() 메서드를 사용하면 풍부한 양의 인스턴스를 전달할 수 있습니다. 따라서 예를 들면 다음과 같습니다.

+0

내 종속성이 싱글 톤이 아닌 경우 범위 또는 일시적인 수명이있는 컨테이너에 등록 된 서비스라고 가정 해 봅시다. –

+0

그 구체적인 예에서는 Serilog가 DI 컨테이너와 통합되어야한다고 생각합니다. 예를 들어, Serilog는 Autofac과 통합되어 있습니다 : https://github.com/nblumhardt/autofac-serilog-integration – rmc00

관련 문제