2011-07-17 7 views
0

クラス属性に基づいて登録されたクラスにインターセプタを追加する機能を作成しようとしています。 は、これは私の施設である:城ウィンザーファシリティ内にクラスプロキシを作成する

public class MyFacility : AbstractFacility 
{ 
    protected override void Init() 
    { 
     this.Kernel.ComponentRegistered += (s, h) => 
     { 
      if (h.ComponentModel.Implementation.GetCustomAttributes(typeof(MyAttribute), false).Length > 0) 
      { 
       h.ComponentModel.Interceptors.Add(InterceptorReference.ForType<MyInterceptor>()); 
      } 
     } 
    } 
} 

が、私はクラスメソッドでthisキーワードを使用する場合は、この方法では、それがターゲットクラスではないプロキシクラスを参照し、これは私が正しく動作しません使用して、いくつかのフレームワークを作ります。

ProxyGenerator.CreateClassProxy<MyClass>()メソッドで生成されたものと同じプロキシを作成する必要があります。

どうすればこの問題を解決できますか?

+0

もっとコードを表示できますか?登録しているコンポーネントがインタフェースまたはクラスですか? – svick

+0

私が登録しているコンポーネントはインターフェイスです。 Thiはウィンザーのインストールです。 _wc = new WindsorContainer(); _wc.AddFacility (); ( コンポーネント。 – Gigitsu

答えて

1

クラスをコンポーネントのサービスとして公開します。

container.Register(
    Component.For<SomeClass,ISomeInterface>().Lifestyle.Whatever.Interceptors<SomeInterceptor>() 
); 
+0

クラスをサービスとして公開するにはどうすればよいですか?あなたは例を挙げてください。 – Gigitsu

関連する問題