本博客已经转移至www.mozlite.com,可能不会及时更新和关注留言记录,mvc请加群88794325(已满),8781765ASP.NET(MVC)讨论二群

[EnterpriseLibrary]Microsoft.Practices.ObjectBuilder全局观

  上回我们偷偷看了Microsoft.Practices.ObjectBuilder(以下把它称为OB)中的定位器Locator,这回我们从整体上来看看这个Framework。要想真正了解OB的使用方法当然就要对他有个整体的认识,我们想学她,当然是为了要用它,但最重要的是可以通过分析它的机理来巩固我们的知识。但对于一个不是很小的类库来说,想一下子了解他是不可能的,更何况OB连文档都是null,所以只能一步一步的慢慢的拆开他。其实不用我们怎么拆,因为源码已经把各个相关的放在单独的文件夹里了。好了闲话不多说了,一起上吧!

  在OB里有几个相当重要的类,下面我们来看看吧!

  Strategies和Policies:OB是基于策略和方针。通过策略链(这里运用了责任链设计模式)可以搜索到已被注册过的策略;策略利用方针指出怎样来创建一个对象;方针向OB注册一个类型。值得一提的是在OB中每一个注册的对象都包含一个ID和类型,这样可以通过ID来检索对象;

  Locator:定位器当然是用来搜索已经注册过的对象,当一个对象被创建时,他就向定位器注册,以便后面检索。可以在CreationStrategy类中的RegisterObject方法看到;

  LifeContainer:从字面上我们就可以看到应该是生存期容器(但不知道有没有更好的说法),每一个对象都有自己的生存期,在OB中LifeContainer就是包含一系列对象Object的列表,由于对象包含在LifeContainer中,当然如果释放(Disposed)LifeContainer,列表中的所有对象都将被释放。

  BuilderContext:上下文贯穿对象创建的整个过程(也就是说从一个对象的BuildUp到TearDown),上下文中包含Strategies,Policies以及Locator同时还提供了一个迭代策略链的方法。

  理解了以上几个重量级的类,对创建一个对象就不是有很大的问题了,当然想构建很复杂的对象还是要更深入的了解,我将会慢慢的把一些例子和方法搬上来。根据我的了解和总结一般要创建一个方法需要包含以下几个步骤,当然也许不是一定要经过这几个步骤。下面我们来看看这些步骤吧!

  1.要创建一个对象我们要知道需要多少元素才能完成对象的创建对象,总的说来我们需要一个定位器Locator,一个策略链BuilderStrategyChain以及一系列的策略和方针Policies;其实我们都是为创建上下文BuilderContext作准备。

  2.有了策略链当然要往里面灌输策略了,每一个策略对应有一个对应的方针(可能不一定一个或更多,这里还需要更深入的研究,如果不对请多指教);而且创建一个对象一般都要包含一个CreationStrategy。

  3.有了策略,当然我们要为每一个策略设置相应的方针,通常对应CreationStrategy策略的方针都用默认的
DefaultCreationPolicy ,当然也可以有其他的方针。

   4.以上的条件都具备时,要创建一个上下文还缺少一个定位器Locator,我们也需要一个LifeContainer来保存对象。

   5.创建上下文BuilderContext,到这里基本上已经解决了,利用策略链里的BuildUp方法就解决了。

    策略是要告诉我们用什么方针来完成,而方针是注册一个对象类型,通过定位器我们可以获得已注册(检索已注册的对象)或未注册(那就创建新对象)的对象。今天就先说到这里了,如果有什么不对的地方请多指教。

posted @ 2007-01-24 11:41  网魂小兵  Views(3418)  Comments(1Edit  收藏  举报