0

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>());
}

私はこの問題を盲目的に見つめています。誰か助けてもらえますか?

4

2 に答える 2

1

Castleは、アプリケーションのロギングを構成するための優れた方法であるインターセプターを提供します。この質問を参照してくださいCastle、AOP、および.NETでのログイン

于 2011-01-25T08:48:27.650 に答える
1

ハ-昔からの質問に出くわしたので、答えを投稿しようと思いました。答えはこの質問から得られます:なぜLog4Netでロガーに名前を付けたのですか?

重要なのは、ファクトリメソッドでCreationContextを次のように使用することです。

...UsingFactoryMethod((kernel,context) => new MyInstance(context.Handler.ComponentModel.Implementation));

もちろん、必要に応じてライフスタイルを追加してください。

于 2015-10-30T10:43:48.313 に答える