博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Composite UI][OB之BuilderStrategy扩展(一)]CAB之BuilderStrategy概览
阅读量:6887 次
发布时间:2019-06-27

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

 

********************************************************************

*                                                 版权声明
*
* 本文以Creative Commons的发布,请严格遵循该授权协议。
* 本文首发于, 此声明为本文章中不可或缺的一部分。
* 作者网名:    浪子
* 作者EMAIL
* 作者BLOG: 
*
********************************************************************

[CAB][OB之BuilderStrategy扩展(一)]CAB之BuilderStrategy概览

-Written by  (06-09-21)

摘要:

有看过CAB的人一定非常赞叹于CAB中对Attribute的灵活应用程度,它使得开发者只需要轻轻松松的贴上相关的Atrribute就可以从CAB中获得想要的XX。而如此便捷的开发方法,背后是以IoC/DI思想为指导,依托OB(关于OB的相关知识请参考:)来实现的。本系列文章试图从CAB如何应用OB的角度来深入了解CAB到底是如何产生这种灵活的开发机制的。

CAB到底扩展了哪些BuilderStrategy,并且应用了哪些BuilderStrategy,我们从  
public abstract class CabApplication
where TWorkItem : WorkItem, new()
中可以看到,CAB到底应用了多少个策略,以及他们是如何协同工作的。

private Builder CreateBuilder()

{
Builder builder = new Builder();
builder.Strategies.AddNew<EventBrokerStrategy>(BuilderStage.Initialization);
builder.Strategies.AddNew<CommandStrategy>(BuilderStage.Initialization);
builder.Strategies.Add(new RootWorkItemInitializationStrategy(this.OnRootWorkItemInitialized), BuilderStage.Initialization);
builder.Strategies.AddNew<ObjectBuiltNotificationStrategy>(BuilderStage.PostInitialization);
builder.Policies.SetDefault<ISingletonPolicy>(new SingletonPolicy(true));
builder.Policies.SetDefault<IBuilderTracePolicy>(new BuilderTraceSourcePolicy(new TraceSource("Microsoft.Practices.ObjectBuilder")));
builder.Policies.SetDefault<ObjectBuiltNotificationPolicy>(new ObjectBuiltNotificationPolicy());
return builder;
}

可见CAB对于PreCreation,Creation并没有进行任何的扩展,关键在于对象创建后的Initialization和PostInitialization阶段。

在Initialization扩展了

  • EventBrokerStrategy:用来处理事件的发布与订阅
  • CommandStrategy:用来处理Command与事件的关联
  • RootWorkItemInitializationStrategy:用来处理RootWorkItem的其他初始化工作

在PostInitialization则扩展了

  • ObjectBuiltNotificationStrategy:对象创建通知服务

虽然有4个扩展策略,但是CAB默认只启用了SingletonPolicy,BuilderTraceSourcePolicy,ObjectBuiltNotificationPolicy。哪是这些策略在哪里启用呢?搜索一下整个源码,发现只有WorkItem里面有设置Policy的地方 

protected internal void BuildUp(){// We use Guid.NewGuid() to generate a dummy ID, so that the WorkItem buildup sequence can// run (the WorkItem is already located with the null ID, which marks it as a service, so// the SingletonStrategy would short circuit and not do the build-up).Type type = GetType();string temporaryID = Guid.NewGuid().ToString();PropertySetterPolicy propPolicy = new PropertySetterPolicy();propPolicy.Properties.Add("Parent", new PropertySetterInfo("Parent", new ValueParameter(typeof(WorkItem), null)));PolicyList policies = new PolicyList();policies.Set
(new SingletonPolicy(false), type, temporaryID);policies.Set
(propPolicy, type, temporaryID);builder.BuildUp(locator, type, temporaryID, this, policies);}

是不是有点纳闷?其实我走入了一个误区,在中下过这样一个定论:OB的BuilderStrategy如何起作用,都是通过相关的BuilderPolicy 来决定。而CAB中的BuilderStrategy却没有通过BuilderPolicy来约束BuilderStrategy的应用。

那CAB是不是就只有这些BuilderStrategy呢?

这些策略当然不够用的。这些只是核心的BuilderStrategy,或者叫"无关UI的BuilderStrategy"。

相反,CAB中还有些与UI有关的BuilderStrategy,看一下WinForm应用程序的基类CabApplication

public abstract class CabApplication
where TWorkItem : WorkItem, new()
中的
/// /// May be overridden in a derived class to add strategies to the 
.///
protected virtual void AddBuilderStrategies(Builder builder){}
这个方法就是为子类提供新增自定义BuilderStrategy的一种途径。
比如子类WindowsFormsApplication中的
/// /// Adds Windows Forms specific strategies to the builder./// protected override void AddBuilderStrategies(Builder builder){builder.Strategies.AddNew
(BuilderStage.Initialization);builder.Strategies.AddNew
(BuilderStage.Initialization);builder.Strategies.AddNew
(BuilderStage.Initialization);}
可见从CabApplication继承出来的子类,还存在继续扩展OB创建策略的可能性。在WindowsFormsApplication中就扩展了适用于WinForm的三个创建策略。
假设我们新实现了一个WebFormsApplication,很有可能就需要创建跟Web UI比较密切相关的BuilderStrategy。
 
小结:
可见CAB中的BuilderStrategy可分为两大类:无关UI和UI相关。
后续我按自己的研读步骤,逐一剖析每一个BuilderStrategy的内部机制以及它在CAB中所起的作用。
 
注:
-------------------------------------------------
  • CAB:Composite UI Application Block 简称, 站点:
  • OB:ObjectBuilder简称,站点:
分类: , ,
本文转自浪子博客园博客,原文链接:http://www.cnblogs.com/walkingboy/archive/2006/09/21/CAB_OB_BuilderStrategy.html,如需转载请自行联系原作者
你可能感兴趣的文章
一次单核CPU占用过高问题的处理
查看>>
如何让自己的电脑发布ASP http://jingyan.baidu.com/article/19192ad853224ce53f570748.html
查看>>
SQL基础
查看>>
String是基本的数据类型吗?
查看>>
为什么互联网产品的成功率这么低
查看>>
Android动画学习笔记-Android Animation
查看>>
sql2003安装sql2005企业版
查看>>
HDU 4394 Digital Square
查看>>
TServerSocket组件
查看>>
ASP.NET Razor - C# Variables
查看>>
项目管理理论与实践系列文章索引
查看>>
Linux信号(signal) 机制分析
查看>>
SQLSERVER:sqlserver2008r2安装好后,自动提示功能不可以使用
查看>>
搭建属于自己的VIP积分系统(1)
查看>>
mysql awr 1.0.5 GA正式版发布
查看>>
usb-to-isp-for-stm32
查看>>
C++ 风格与技术 FAQ(中文版)
查看>>
windows下使用redis,Redis入门使用,Redis基础命令
查看>>
Hadoop概念学习系列之如何去找到历史版本的Hadoop发行包(三十四)
查看>>
一周规划汇总_2016-09-25
查看>>