Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用自动布线的Unity侦听

使用自动布线的Unity侦听
EN

Stack Overflow用户
提问于 2012-12-10 15:12:05
回答 1查看 903关注 0票数 1

我使用一个HadlerAttribute和一个ICallHandler实例让Unity interception正常工作。要让它正常工作,我所要做的就是用Trace属性来装饰这个类,并且拦截器工作得很好。

代码语言:javascript
运行
AI代码解释
复制
  [Trace]
public interface IPersonService
{
    string GetPerson();
}

但是,我希望在几个程序集中对我的所有方法都能进行拦截。所以我使用Unity AutoRegistration来设置我的容器,如下所示:

代码语言:javascript
运行
AI代码解释
复制
private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();

        //container.AddNewExtension<UnityInterfaceInterceptionRegisterer>();

        container.
            ConfigureAutoRegistration().
            ExcludeSystemAssemblies().  
            LoadAssemblyFrom(typeof(PersonService).Assembly.Location).
            Include(If.ImplementsITypeName, Then.Register()).
            ApplyAutoRegistration();


        return container;
    }

工作得很好,除非我尝试按照这篇文章设置全局注册:http://unity.codeplex.com/discussions/281022

我有一个如下配置的UnityContainerExtension,其中MVC4Unity是我的DLL:

代码语言:javascript
运行
AI代码解释
复制
public class UnityInterfaceInterceptionRegisterer : UnityContainerExtension
{
    protected override void Initialize()
    {
        base.Container.AddNewExtension<Interception>();

        base.Container.Configure<Interception>().
            AddPolicy("LoggingPolicy").
            AddMatchingRule<AssemblyMatchingRule>
            (new InjectionConstructor("MVC4Unity")).
            AddCallHandler(new TraceCallHandler()); 


        base.Context.Registering += new EventHandler<RegisterEventArgs>(this.OnRegister);
    }

    private void OnRegister(object sender, RegisterEventArgs e)
    {
        IUnityContainer container = sender as IUnityContainer;

        if (e != null && e.TypeFrom != null && e.TypeFrom.IsInterface)
        {
            container.Configure<Interception>()
                .SetInterceptorFor(e.TypeFrom, e.Name, new InterfaceInterceptor());
        }
    }
}

不幸的是,它总是抛出一个StackOverflowException (!)当它进入OnRegister方法时。

那么问题是,是否有人使用Unity实现了程序集甚至命名空间范围的拦截,这是可行的方法吗?

编辑

似乎无论我在下面的AddMatchingRule行中添加什么,OnRegister处理程序也会为所有包含的程序集调用!(例如,甚至Microsoft.*命名空间程序集!)

代码语言:javascript
运行
AI代码解释
复制
base.Container.AddNewExtension<Interception>();

        base.Container.Configure<Interception>().
            AddPolicy("LoggingPolicy").
            // see what other types of matchings rules there are!
            AddMatchingRule<NamespaceMatchingRule>
            (new InjectionConstructor("MVC4Unity.*")).
            AddCallHandler(new TraceCallHandler()); 


        base.Context.Registering += new EventHandler<RegisterEventArgs>(this.OnRegister);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-02 07:33:12

我的答案来晚了,但也许有人会发现这很有用。

  • 如果我理解正确的话,您需要将一个匹配规则应用于多个程序集。对于这类任务,您可以使用AssemblyMatchingRule (MSDN)。

container.Configure() .AddPolicy(“NamespaceMatchingRule.”) .AddMatchingRule( new InjectionConstructor(“InjectionParameter”) .AddCallHandler( new ContainerControlledLifetimeManager(),new InjectionConstructor(),new InjectionProperty(" order ",1));最后一段代码中的

  • 我认为您需要删除名称空间末尾的点星号,以便向日志中添加MVC4Unity名称空间

有关更多信息,请查看此链接- Policy Injection MSDN

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13803656

复制
相关文章
最优布线问题
【问题描述】   学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。     当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计算机(作为中转)来实现与另一台计算机的连接。   现在由你负责连接这些计算机,任务是使任意两台计算机都连通(不管是直接的或间接的)。 【输入格式】   输入文件wire.i
attack
2018/04/12
8740
vue2之侦听器的简单使用
无法在刚进入页面时自动触发,只有在侦听到变化才会触发 如果侦听的是对象,当对象的属性发生变化时,不会侦听到
xinxin-l
2022/03/29
4160
Vue的 侦听器 watch
watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,
wust小吴
2019/12/27
6550
侦听器watch
虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。 这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。
名字是乱打的
2021/12/22
6850
侦听器watch
机房布线的最高境界……
蓝色系 黄色系 绿色系 青色系 紫色系 橙色系 混色系 黑暗系。。。 —— The End ——
鲜枣课堂
2020/06/09
2.6K0
机房布线的最高境界……
1231 最优布线问题
1231 最优布线问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的。为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地通过其他计算机实现和另外一台计算机连接。 为了使得任意两台计算机之间都是连通的(不管是直接还是间接的),需要在若干台计算机之间用网线直接连接,现在想使得总的连接费用最省,让你编程计算这个最小的费用。 输入描述 I
attack
2018/04/12
7460
Android Listener侦听的N种写法
Android中,View的Listener方法,在是否使用匿名类匿名对象时,有各种不同的写法。
阳光岛主
2019/02/19
1.5K0
九.Vue.js的侦听器
九.Vue.js的侦听器
Java架构师必看
2021/05/14
5440
Unity自动寻路入门指南
Unity自动寻路指南 主要参考Naviation这个文档。本文不关注自动寻路的原理,如有需要可以在这里查看nav-InnerWorkings 一些名词 Agent:绑定在人物身上的,用于实现自动寻路的,看上去就像一个collision。 NavMesh:Agent可以在NavMesh在行走。 Off-Mesh Link:相当于传送门。 NavMesh Obstacle:障碍物。 创建NavMesh 标记为Navigation Static 所有用于成为NavMesh的网格都必须被指定为Navigat
xferris
2018/06/01
1.5K0
Unity 3D自动对焦
在使用Vuforia制作时候,导入安装包后,在手机上使用时候镜头会很模糊,往往连识别对象都看不清。
Aidol
2020/07/23
1.1K0
程序化的事件侦听器
也就是说,在其中一个页面中我们使用uni.on或者uni.once,在另一个页面中就可以使用uni.emit进行调用,前提是uni,on或者uni.
阿超
2022/08/17
1.4K0
程序化的事件侦听器
Unity 使用快速教程
Unity是微软在CodePlex上的一个开源项目,可用于依赖注入、控制反转,类似Spring,下面是使用示例: 1.先来定义几个接口、类 1 namespace UnityTest 2 { 3
菩提树下的杨过
2018/01/24
1.2K0
Unity 使用快速教程
侦听局域网内密码
只需在前面的网络嗅探程序基础上,添加对搜索出的端口号进行的增加功能即可: 代码如下: 在DecodeIPPacket中添加: switch(::ntohs(pTCPHdr->destinationPort)) { case 21: { GetFtp((char*)pTCPHdr+sizeof(TCPHeader),pIPHdr->ipDestination);
用户1154259
2018/01/17
1.5K0
侦听局域网内密码
unity htc vive使用
本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲解HTC VIVE设备和Unity的结合使用 工具/原料 高配电脑一台:GTX970显卡及以上,8G内存,128G固态硬盘,1T机械硬盘 HTC VIVE设备一套 23寸显示器一台 5米*5米左右大小的房间 方法/步骤 1 HTC VIVE设备的安装,详见HTC VIVE官网,官网
庞小明
2018/03/09
1.2K0
unity htc vive使用
bootstrap源码分析之scrollspy(滚动侦听)
源码文件: Scrollspy.js 实现功能 1、当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项 2、导航必须是 .nav > li > a 结构,并且a上href或data-target要绑定hashkey 3、菜单上必须有.nav样式 4、滚动区域的data-target与导航父级Id(一定是父级)要一致 <div id="selector" class="navbar navbar-default"> <ul class="nav navbar-nav
sam dragon
2018/01/17
1.1K0
unity htc vive使用
本文介绍如何在Unity中使用HTC vive设备,当前VR作为市场比较火热的热点,HTC VIVE设备作为三大供应商之一,许多人购买了该设备,却不知道如何使用,本文通过图文并茂的形式,进行手把手的讲解HTC VIVE设备和Unity的结合使用
全栈程序员站长
2022/07/19
9230
unity htc vive使用
布线问题-分支限界法
问题描述:   印刷电路板不限区域划分成n*m个方格阵列。如下图所示   精确的电路布线问题要求确定连接方格a的中点,到连接方格b的中点的最短布线方案。   布线时,电路只能沿直线或直角布线。为了避免
用户1154259
2018/01/17
1.3K0
布线问题-分支限界法
Vue计算属性和侦听器
模板内的表达式非常便利,但放入太多的逻辑会让模板过重且难以维护,所以,对于复杂的逻辑,可以使用计算属性 computed。
Leophen
2019/08/23
6710
Unity3D学习笔记3——Unity Shader的初步使用
在上一篇文章《Unity3D学习笔记2——绘制一个带纹理的面》中介绍了如何绘制一个带纹理材质的面,并且通过调整光照,使得材质生效(变亮)。不过,上篇文章隐藏了一个很重要的细节——Unity Shader。Shader(着色器)是渲染管线中可被用户编程的阶段,依靠着色器可以控制渲染管线的细节。现代图像渲染技术,都把Shader封装成与Material(材质)相关的组件。所以这篇文章,我们就初步学习下在Unity中使用Shader。
charlee44
2021/08/06
4.2K0
Unity3D学习笔记3——Unity Shader的初步使用
布线问题(分支限界法)
(1)比较:分支限界法和回朔法有相似之处,但是回朔法是搜索问题的所有解,采用深度优先搜索;而分支限界法是搜索问题的最优解,采用的是广度优先搜索;
全栈程序员站长
2022/09/06
6070
布线问题(分支限界法)

相似问题

无法自动布线

50

如何正确思考布线或自动布线?

20

vb.net中的unity侦听自动配置

13

自动布线失败

12

弹簧自动布线

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文