• Unity The Tag Attribute Matching Rule


    Unity通过TagAttribute显示定义需要被拦截注入的成员,TagAttributeMatchingRule类型用来匹配该规则。需要注意的是TagAttributeMatchingRule不支持通配符。看一个简单的例子:

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

    配置文件定义如下:

    <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=”TagAttributePolicy”>
            <matchingRule name=”TagAttributeMatchingRule” type=”TagAttributeMatchingRule”>
              <constructor>
                <param name=”tagToMatch” value=”Test” />
              </constructor>
            </matchingRule>
            <callHandler name=”Log4NetHandler” type=”Log4NetHandler” />
          </policy>
        </interception>
    
        <register type=”MyObject”>
          <interceptor type=”VirtualMethodInterceptor” />
          <interceptionBehavior type=”PolicyInjectionBehavior” />
        </register>
      </container>
    </unity>
  • 相关阅读:
    【转载】数据结构与算法设计
    【转载】简述Linux的启动过程
    【转载】20分钟MySQL基础入门
    【转载】linux内核笔记之进程地址空间
    【转载】linux内核笔记之高端内存映射
    Logical Address->Linear Address->Physical Address
    【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
    【转载】不会编程也能写爬虫?可视化爬虫工具是什么东东
    【转载】我是一个键盘
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/junchu25/p/2633419.html
Copyright © 2020-2023  润新知