2012-03-22 12 views
1

私は団結 - inteceptingクラスは

public interface Interfcae1 
    { 
     void OP1(); 
    } 

    public interface Interfcae2 
    { 
     void OP2(); 
    } 

    public interface Interfcae3 
    { 
     void OP3(); 
    } 

    public class Multi : Interfcae1, Interfcae2, Interfcae3 
    { 
     public void OP1() 
     { 
      System.Threading.Thread.Sleep(500); 
     } 

     public void OP2() 
     { 
      System.Threading.Thread.Sleep(1500); 
     } 

     public void OP3() 
     { 
      System.Threading.Thread.Sleep(2500); 
     } 
    } 

私は、すべての機能を傍受するために団結を使用したいが、それは各呼び出しのために取るどのくらいの時間をテストするために呼び出して、このコードを持っているいくつかのインタフェースを呼び出します。

私のメインのコードは

IUnityContainer container = new UnityContainer(); 
container.AddNewExtension<Interception>(); 
container.RegisterType<Interfcae1, Multi>(
         // new InjectionConstructor(typeof(string)), 
         new Interceptor<TransparentProxyInterceptor>(), 
         new InterceptionBehavior<InterceptBehavior>()); 
container.RegisterType<Interfcae2, Multi>(
       // new InjectionConstructor(typeof(string)), 
         new Interceptor<TransparentProxyInterceptor>(), 
         new InterceptionBehavior<InterceptBehavior>()); 
container.RegisterType<Interfcae2, Multi>(
       // new InjectionConstructor(typeof(string)), 
         new Interceptor<TransparentProxyInterceptor>(), 
         new InterceptionBehavior<InterceptBehavior>()); 

var proxy = container.Resolve<Multi>(); 

ですが、決意で、私は例外はタイプがインターセプト可能でないことをあなたがConfigure

答えて

1

覚えていました取得していますか?その後

var intp = container.Configure<Interception>() 
    .SetInterceptorFor(qualifiedType, new TransparentProxyInterceptor()); 

AddPolicyとあなたが行くために良いことがあります...が傍受するためのインタフェース、および傍受ハンドラの型情報を指定するために覚えていますか。

var policy = intp.AddPolicy("myFirstInterception"); 
policy.AddMatchingRule<TypeMatchingRule>(
    new InjectionConstructor(
     new InjectionParameter(typeof(Interface1)))) 
      .AddCallHandler(typeof(MyInterceptionHandler), 
       new ContainerControlledLifetimeManager()); 

としてもMultiクラス定義を変更してみてください。

public class Multi : MarshalByRefObject, Interfcae1, Interfcae2, Interfcae3 
+0

i)が(このラインのvar INTP = container.Configure <インターセプト>を追加したSetInterceptorFor(typeof演算(マルチ)、新しいTransparentProxyInterceptor()。 );例外を得ました - > ConsoleApplication1.Multi型はインターセプトできません。 パラメータ名:typeToIntercept –

+0

'MarshalByRefObject'をMultiクラスに追加します。 – code4life

+0

MarshalByRefObjectとは何ですか? –