zoukankan      html  css  js  c++  java
  • Unity The Return Type Matching Rule

    之前提到Unity提供的ParameterTypeMatchingRule无法定义返回值,ReturnTypeMatchingRule就是用来完成限制这个条件。看一个简单的示例:

     1 public class MyObject
     2 {
     3   public virtual Int32 DoWork(Int32 i, Char c)
     4   {
     5     return i;
     6   }
     7 
     8   public virtual void DoWork2(Int32 i, Char c)
     9   {
    10 
    11   }
    12 
    13   public virtual void DoWork3()
    14   {
    15 
    16   }
    17 }
    18 
    19 IUnityContainer unityContainer = new UnityContainer();
    20 
    21 unityContainer.LoadConfiguration();
    22 
    23 unityContainer.Configure<Interception>()
    24   .AddPolicy(“ReturnTypeMatchingRule”)
    25   .AddMatchingRule(new ReturnTypeMatchingRule(“System.Int32″))
    26   .AddCallHandler<Log4NetHandler>();
    27 unityContainer.RegisterType<MyObject>(
    28   new Interceptor<VirtualMethodInterceptor>(),
    29   new InterceptionBehavior<PolicyInjectionBehavior>()
    30 );
    31 
    32 MyObject myObject = unityContainer.Resolve<MyObject>();
    33 
    34 myObject.DoWork(Int32.MaxValue, Char.MaxValue);
    35 myObject.DoWork2(Int32.MaxValue, Char.MaxValue);
    36 myObject.DoWork3();

    MyObject中只有函数DoWork的返回值匹配了定义,配置文件定义如下:

    <unity xmlns=”http://schemas.microsoft.com/practices/2010/unity”>
      <sectionExtension type=”Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration” />
    
      <assembly name=”mscorlib, 2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″ />
      <assembly name=”Microsoft.Practices.Unity.Interception” />
      <assembly name=”UnityTest6″ />
    
      <namespace name=”System” />
      <namespace name=”System.Collections.Generic” />
      <namespace name=”Microsoft.Practices.Unity.InterceptionExtension” />
      <namespace name=”UnityTest6″ />
    
      <container>
        <extension type=”Interception” />
    
        <interception>
          <policy name=”ReturnTypePolicy”>
            <matchingRule name=”ReturnTypeMatchingRule” type=”ReturnTypeMatchingRule”>
              <constructor>
                <param name=”returnTypeName” value=”System.Int32″ />
              </constructor>
            </matchingRule>
            <callHandler name=”Log4NetHandler” type=”Log4NetHandler” />
          </policy>
        </interception>
    
        <register type=”MyObject”>
          <interceptor type=”VirtualMethodInterceptor” />
          <interceptionBehavior type=”PolicyInjectionBehavior” />
        </register>
      </container>
    </unity>
  • 相关阅读:
    紫书 习题 11-15 UVa 1668 (图论构造法)
    紫书 习题 11-16 UVa 1669(树形dp)
    紫书 习题 11-12 UVa 1665 (并查集维护联通分量)
    紫书 习题 11-10 UVa 12264 (二分答案+最大流)
    紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)
    紫书 例题 11-13 UVa 10735(混合图的欧拉回路)(最大流)
    欧拉回路模板
    架构设计:进程还是线程?是一个问题!(转载)
    JDK个目录,以及与环境变量的关系
    linux cat命令
  • 原文地址:https://www.cnblogs.com/junchu25/p/2633415.html
Copyright © 2011-2022 走看看