2011-01-24 16 views
0

は、私は私の城ウィンザーコンテナの正しい私のバインディングを取得して少し苦労しています。元の問題はlog4netと名前付きロガーに関係しており、その説明はSetting the name of a log4net loggerです。はどのようdependerの種類を得るのですか?

しかし、問題は今、これに絞られます。

私はIAuditorを実装するクラスのLog4NetAuditorを持っています。私のクラスの中には、抽象クラスAuditableComponentを拡張しています。このクラスには、IAuditor型のAuditorというプロパティを持っています。私が城を持っているIAuditorをregigateするとき、それは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>()); 
} 

。誰も助けることができますか?

答えて

0

ハにこの質問を参照してください - 私はちょうど私の古くからの質問に出くわしたので、私は、私は答えを投稿しようと思いました。答えはこの質問から取得されます:Why have named logger in Log4Net?

キーはもちろんそう

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

のようなファクトリメソッドでCreationContextを使用することです - 必要に応じて、あなたのライフスタイルを追加します。

1

城は、アプリケーションのログを構成するための良い方法ですインターセプタを提供します。 Castle, AOP and Logging in .NET

+0

はい、私はインターセプタを認識してんだけど、彼らは唯一の仮想メソッドでは動作し、特にとして、私の要求に答えを提供していません。しかし、提案をありがとう。 –

関連する問題