2009-07-27 9 views
1

私は動作するように作成したインターセプタを取得しようとしていますが、何らかの理由でコンポーネントをリクエストしたときにインターセプタをインスタンス化していないようです。私はインターセプタのコンストラクタにブレークポイントを入れてきたし、それはいないようです流暢なインターフェイスを持つ城インターセプタ

container.Register(
    Component.For<MyInterceptor>().LifeStyle.Transient, 
    AllTypes.Pick().FromAssembly(...).If(t => typeof(IView).IsAssignableFrom(t)). 
    Configure(c => c.LifeStyle.Is(LifestyleType.Transient).Named(...). 
        Interceptors(new InterceptorReference(typeof(MyInterceptor)). 
    WithService.FromInterface(typeof(IView))); 

:私は、この(これは非常にコンパイルされませんが、あなたのアイデアを得る必要があるなら、私を許して)のようなものをやっていますそれをまったくインスタンス化すること。

私は以前、XML設定を使用してインターセプタを登録しましたが、流暢なインターフェイスを使用したいと思っています。

ご協力いただければ幸いです!

答えて

6

私はあなたが悪用していると思いますWithService.FromInterface。ドキュメントは、

サブインターフェイスを検索するために実装を使用しています。たとえば、 IServiceおよびIProductServiceの場合: ISomeInterface、IService、 ISomeOtherInterface。 FromInterface(typeof(IService))を呼び出すと、 IProductServiceが使用されます。便利な 登録する場合すべて サービスですが、指定する必要はありません。

また、InterceptorGroup Anywhereもありません。 はここで働くのサンプルですが、私はそれを動作させるためにあなたのサンプルからできるだけそれを変更:

[TestFixture] 
public class PPTests { 
    public interface IFoo { 
     void Do(); 
    } 

    public class Foo : IFoo { 
     public void Do() {} 
    } 

    public class MyInterceptor : IInterceptor { 
     public void Intercept(IInvocation invocation) { 
      Console.WriteLine("intercepted"); 
     } 
    } 

    [Test] 
    public void Interceptor() { 
     var container = new WindsorContainer(); 

     container.Register(
      Component.For<MyInterceptor>().LifeStyle.Transient, 
      AllTypes.Pick() 
       .From(typeof (Foo)) 
       .If(t => typeof (IFoo).IsAssignableFrom(t)) 
       .Configure(c => c.LifeStyle.Is(LifestyleType.Transient) 
            .Interceptors(new InterceptorReference(typeof (MyInterceptor))).Anywhere) 
       .WithService.Select(new[] {typeof(IFoo)})); 

     container.Resolve<IFoo>().Do(); 
    } 
} 
+0

これは動作しますが、それは私がちょうどInterceptorGroup上の任意の場所を欠けていたようだ、私は、これはの念であると思います私はドキュメントを読んでいない(興味がない、どこにいるの?)。 WithService.Select()は、複数回実装されているので(質問しないで)、IViewを使用してインターフェイスを選択しているようではありませんが、FromServiceはトリックを行うようです。 – jonnii

関連する問題