カスタムファクトリメソッドを使用して、Unityで解決タイプの親を取得することは可能ですか?私はいくつかのコンテキストがすでに親オブジェクトに関してそれに適用されているロガーを構築しようとしています。UnityのカスタムInjectionFactoryから現在ビルドオブジェクトを取得する
// ... other types being registered
container.RegisterType<ILogger>(new InjectionFactory(ResolveLogger));
// Custom factory method
private ILogger ResolveLogger(IUnityContainer container)
{
// I want to know the type of the parent that requires the ILogger interface so that I can add it to my logging context (with Serilog):
Type parentType = ???
return Log.Logger.ForContext(parentType);
}
私はクラスのインスタンスを作成すると、Serilogは私がこのようにロガーのためのコンテキストを設定することができます:その後
public class MyService
{
private readonly ILogger logger;
public MyService(ILogger logger)
{
this.logger = logger.ForContext(this.GetType());
}
}
、this.logger.Information("Hello World")
への呼び出しのすべてが、追加のメタデータが含まれますMyServiceクラスで呼び出されたことを示しています。
私はUnityを仕事に使うことによってロガーを消費するすべてのクラスでlogger.ForContext(this.GetType())
を呼び出すことを忘れないようにしようとしていました。
最終目標が何であるかを説明してください。多分もっと良い解決策があるかもしれません。 – Michael
質問を私の具体的な目標に更新しました。 –
Unityがその情報を提供しているかどうかわかりません。カスタムリゾルバまたはカスタムポリシーやカスタムビルドを調べることができます。しかし、私はLog4Netがあなたが望むことをしていると思います。 – Michael