博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity The Parameter Type Matching Rule
阅读量:6138 次
发布时间:2019-06-21

本文共 3602 字,大约阅读时间需要 12 分钟。

Unity提供了函数入口参数类型匹配的规则ParameterTypeMatchingRule类型。它可以针对一些特定函数的入口参数进行拦截,比如拦截入口参数类型为Int32和Char的函数,看一个简单示例:

1 public class MyObject 2 { 3   public virtual void DoWork(Int32 i, Char c) 4   { 5  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 ParameterTypeMatchingInfo[] paramsUsed = new ParameterTypeMatchingInfo[]24 {25   new ParameterTypeMatchingInfo(“System.Int32″, false, ParameterKind.Input),26   new ParameterTypeMatchingInfo(“System.Char”, false, ParameterKind.Input)27 };28 29 unityContainer.Configure
()30   .AddPolicy(“ParameterTypeMatchingRule”)31   .AddMatchingRule(new ParameterTypeMatchingRule(paramsUsed))32   .AddCallHandler
();33 unityContainer.RegisterType
(34   new Interceptor
(),35   new InterceptionBehavior
()36 );37 38 MyObject myObject = unityContainer.Resolve
();39 40 myObject.DoWork(Int32.MaxValue, Char.MaxValue);41 myObject.DoWork2(Int32.MaxValue, Char.MaxValue);42 myObject.DoWork3();

只有MyObject的DoWork和DoWork2函数符合定义的ParameterTypeMatchingRule。虽然ParameterTypeMatchingInfo允许定义返回值和它的类型,但是在ParameterTypeMatchingRule中无效。看一个简单的例子:

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 ParameterTypeMatchingInfo[] paramsUsed = new ParameterTypeMatchingInfo[]24 {25   new ParameterTypeMatchingInfo(“System.Int32″, false, ParameterKind.Input),26   new ParameterTypeMatchingInfo(“System.Char”, false, ParameterKind.Input),27   new ParameterTypeMatchingInfo(“System.Int32″, false, ParameterKind.ReturnValue)28 };29 30 unityContainer.Configure
()31   .AddPolicy(“ParameterTypeMatchingRule”)32   .AddMatchingRule(new ParameterTypeMatchingRule(paramsUsed))33   .AddCallHandler
();34 unityContainer.RegisterType
(35   new Interceptor
(),36   new InterceptionBehavior
()37 );38 39 MyObject myObject = unityContainer.Resolve
();40 41 myObject.DoWork(Int32.MaxValue, Char.MaxValue);42 myObject.DoWork2(Int32.MaxValue, Char.MaxValue);43 myObject.DoWork3();

虽然添加了返回值类型的限制,但是DoWork2依然被拦截注入。一般来说我们可以通过ParameterTypeMatchingRule跟踪那些使用句柄的函数。ParameterTypeMatchingRule的构造比较麻烦,首先它的构造函数接受IEnumerable<ParameterTypeMatchingInfo>类型,需要注册一个List<ParameterTypeMatchingInfo>去实现。然后通过method定义Add函数添加一个一个ParameterTypeMatchingInfo。配置文件定义如下:

  
  
  
  
  
  
  
  
    
    
      
        
        
        
      
    
    
      
        
        
        
      
    
    
      
        
          
        
        
          
        
    
    
      
        
          
            
          
        
        
      
    
    
      
      
    
  

转载地址:http://tckya.baihongyu.com/

你可能感兴趣的文章
------__________________________9余数定理-__________ 1163______________
查看>>
webapp返回上一页 处理
查看>>
新安装的WAMP中phpmyadmin的密码问题
查看>>
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
416. Partition Equal Subset Sum
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
[TC13761]Mutalisk
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
while()
查看>>
常用限制input的方法
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>