• [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方法就解决了。

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

  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/xdotnet/p/ObjectBuilder_now.html
Copyright © 2020-2023  润新知