CastleWindsorコンテナのバインディングを正しく取得するのに少し苦労しています。元の問題はlog4netと名前付きロガーに関するものであり、説明はこの質問にあります:log4netロガーの名前の設定。
ただし、問題は現在、次のように絞り込まれています。
IAuditorを実装するクラスLog4NetAuditorがあります。一部のクラスは、タイプIAuditorのプロパティAuditorを持つ抽象クラスAuditableComponentを拡張します。CastleにIAuditorを登録すると、AuditableComponentを拡張するすべてのクラスのAuditorを解決および設定する方法がわかります。
ここで、Typeパラメーターを取得するためにLog4NetAuditorのコンストラクターが必要です。このタイプは、AuditableComponentを拡張するクラスのタイプである必要があります。私はこれをファクトリメソッドで実現しようとしましたが、うまくいきません。
container.Register(Component.For<IAuditor>().ImplementedBy<Log4NetAuditor>()
.UsingFactoryMethod(RegisterAuditor).LifeStyle.Transient);
private static IAuditor RegisterAuditor(IKernel kernel, ComponentModel model, CreationContext context)
{
Type loggerType = //magic to find correct type happens here
return new Log4NetAuditor(loggerType, kernel.Resolve<ILoggerFactory>());
}
私はこの問題を盲目的に見つめています。誰か助けてもらえますか?