前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义Unity 容器的扩展 --- Unity Application Block Event Broker

自定义Unity 容器的扩展 --- Unity Application Block Event Broker

作者头像
张善友
发布2018-01-19 15:39:49
6900
发布2018-01-19 15:39:49
举报
文章被收录于专栏:张善友的专栏张善友的专栏

Unity快速入门的例子中有一个Block Event Broker通过对容器功能的扩展来实现事件截获,其中扩展的代码在项目EventBrokerExtension。该项目允许在应用程序种使用自定义的容器扩展来发布和订阅事件。

自定义Unity 容器扩展是一个从 UnityContainerExtension 基类继承而来并且实现了一些额外的方法的自定义类型。该扩展可以访问容器,并且可以接收到容器中已经注册的事件.

SimpleEventBrokerExtension 类继承 UnityContainerExtension ,它从SimpleEventBroker 工程文件中创建了一个新的EventBroker 类对象,然后重写了UnityContainerExtension 基类的Initialize 方法

SimpleEventBrokerExtension 中Initialize 方法代码如下,添加一个新的 EventBroker ,该 EventBroker 创建到容器的 Locator,以便其他的类能够轻易的定位并引用他,然后他向 Unity 管道添加了2个策略.他向 PreCreation 添加一个反射策略,这样他就能够检查到2个特性,该特性将由扩展使用(他们是 PublishesAttribute 和SubscribesToAttribute),此外他还添加了一个绑定策略到 Initialization,该策略用来注册一些订阅者和发布者,但是订阅者和发布者必须是由 EventBroker 代理类注册的.

代码语言:js
复制
using Microsoft.Practices.Unity;
 using Microsoft.Practices.Unity.ObjectBuilder;
 using SimpleEventBroker; 
namespace EventBrokerExtension
 {
     public class SimpleEventBrokerExtension : UnityContainerExtension, ISimpleEventBrokerConfiguration
     {
         private EventBroker broker = new EventBroker(); 
        protected override void Initialize()
         {
             Context.Locator.Add(typeof(EventBroker), broker); 
            Context.Strategies.AddNew<EventBrokerReflectionStrategy>(UnityBuildStage.PreCreation);
             Context.Strategies.AddNew<EventBrokerWireupStrategy>(UnityBuildStage.Initialization);
         } 
        public EventBroker Broker
         {
             get { return broker; }
         }
     }
 } 

EventBroker 类提供了Dictionary ,用来包含全部的事件名到发布者的映射,并且暴露了一些注册发布者和订阅者的方法,(方法是RegisterPublisher 和RegisterSubscriber)。他也暴露了一些用于特定的事件的反注册方法.这些方法的发部分功能全部在PublishedEvent 类里,该类保存,暴露了所有的发布者和订阅者队列

在前一个队列里的Initialize 的方法里,通过调用EventBroker 类的RegisterPublisher方法 和RegisterSubscriber 方法,wire-up 策略通过Initialize 被添加到Unity .这就是说当Unity 发现PublishesAttribute 和SubscribesToAttribute 特性的时候,他会在EventBroker自动注册类或者类的成员使他成为个发布者或者订阅者。

如果注册成为一个发布者,EventBroker 则调用PublishedEvent 类的AddPublisher 方法,该方法将添加一个新的的发布者到发布者队列之中,并且为发布的事件连接到一个名叫OnPublisherFiring 的事件处理方法.所以当发布者发布事件的时候,PublishedEvent 类中的事件处理方法将通过订阅者队列的事件订阅代理调用每一个方法来做出事件对应的反应.代码如下.

在您创建了一个自定义容器扩展以后,你需要把他添加到Unity 容器.您可以通过编译并且指定一个类型和程序集的名称,然后写入配置文件,也可以通过编程的方式添加到Unity, 事件截获扩展的快速入门通过调用Unity 容器类的一个方法,将自定义的SimpleEventBrokerExtension 类型在运行的时候添加到容器中.

代码语言:js
复制
private static void Main()   
 {   
     Application.EnableVisualStyles();   
     Application.SetCompatibleTextRenderingDefault(false);   
     UnityContainer rootContainer = new UnityContainer();   
     rootContainer.AddNewExtension<SimpleEventBrokerExtension>();   
     Application.Run(rootContainer.Resolve<DefaultForm>());   
 }  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2008-07-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档