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

本文共 3682 字,大约阅读时间需要 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。配置文件定义如下:

  
  
  
  
  
  
  
  
    
    
      
        
        
        
      
    
    
      
        
        
        
      
    
    
      
        
          
        
        
          
        
    
    
      
        
          
            
          
        
        
      
    
    
      
      
    
  

转载于:https://www.cnblogs.com/junchu25/archive/2012/08/11/2633396.html

你可能感兴趣的文章
node-sass 报错的解决方法
查看>>
Python:GeoJson格式的多边形裁剪Tiff影像并计算栅格数值
查看>>
免费下载知网文献的方法 | sci-hub免费下载SCI论文方法
查看>>
测试用例,变量之间,相互调用的方法,和修改原来初始化变量的方法
查看>>
ASP.NET MVC中将控制器分离到类库的实现(转)
查看>>
Poj 2304 Combination Lock(模拟顺、逆时钟开组合锁)
查看>>
Palindrome Number
查看>>
H5上传功能
查看>>
PHP命名空间(Namespace)的使用详解
查看>>
java项目@override报错问题
查看>>
DataTable 和Json 字符串互转
查看>>
Django中Template does not exit
查看>>
Redis安装 java中的连接 序列化 反序列化
查看>>
hdu 1896 优先队列的应用
查看>>
递推和迭代的比较
查看>>
OpenGL 头文件,库文件
查看>>
点与不规则图形关系判断
查看>>
linux不开启图形界面
查看>>
菜鸟学习SSH(二)——Struts国际化
查看>>
iOS 自定义控件--重写一些方法
查看>>