2016-10-03 23 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()'

なぜこのエラーが出るのか理解していますが、簡単な方法はありません。理想的には、私はこのように使用することができWithInstance呼び出しがあると思います:

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

MySerilogEnricherへの依存を渡す方法はありますか?私は多分MySerilogEnricherを持つクラスを持っていて、そのプロパティに依存関係を渡すことができますが、それは面倒です。

答えて

4

genericを除いた.With()メソッドを使用すると、エンリッチャのインスタンスを渡すことができます。したがって、あなたの例では:

+0

しかし、私の依存関係がシングルトンではない場合、スコープまたは一時的なライフタイムを持つコンテナに登録されているサービスはどうですか? –

+0

その具体例では、私はあなたがDI容器と一体化するためにSerilogを必要とすると思います。たとえば、SerilogはAutofacと統合しています:https://github.com/nblumhardt/autofac-serilog-integration – rmc00

関連する問題