• 微软企业库5.0 学习之路——第一步、基本入门


      话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白)。

          直到去年在做项目的时候在看代码生成工具的时候看到了许多生成工具都内置了企业库的数据库访问及一些相关模块,才突然顿悟了,可能企业库应该还是有点用 的,于是就试着使用了企业库的一些模块(当时版本是4.1),果然觉得企业库还是很不错的,微软在企业库中为我们封装了许多日常经常使用的模块,如:数据 库访问,缓存,日志,异常处理,加密,IOC等等,在日常的项目开发中,企业库已经贯穿了一个项目从底层到表示层基本上需要用到的模块,大大方便了我们的 开发,毕竟自己再重复造轮子还不如就用微软的(毕竟企业库现在都到5.0)

          最近在看园子里有好几位都在写,如:virus,huangcong。我现在写的其实基本上都是自己的学习之路(可能没前面2位写的好,但就当自己的学习笔记吧)。

          废话不多说了,首先开始学习企业库的基本概念,一下摘自sfbirp的企业库学习笔记:

    一、什么是企业库?
    
          企业库包含一系列应用程序模块和核心架构。这些高复用的组件旨在帮助开发者解决一些共同的企业开发问题。
    企业库同时提供高可配置的特性,使我们管理重复的工作更加容易,例如我们知道的在应用的很多地方发生的横切关注点。包括像日志记录、缓存、异常管理等。另外,它提供的依赖注入容器能够简化和分解你的设计,使他们更加可实验和容易理解,帮助你创建更加高性能的设计和各种应用。
         二、使用企业库的3个简单步骤:
         1.引用和配置你需要的程序集。
         2.通过企业库配置应用。
         3.在你的代码中创建和使用企业库对象。
          三、企业库的好处:
          应用模块帮助解决开发者从一个项目到另一个项目面对的共同问题。他们的设计封装了微软推荐的做法,这些都是基于微软框架的应用开发。例如,数据访问应用模块提供了对ADO.NET访问最频繁使用的特征。在某些情况下,应用模块还添加了一些基础类库没有直接提供的相关功能。
          四、企业库的目标:
         1.一致。所有的企业库模块都坚持一致的设计模式和实现方式。
         2.可扩展性。所有的应用模块包括定义扩展点,允许开发人员通过添加自己的代码定制应用模块的行为。
         3.易用性。企业库提供了许多实用性的东西,包括一个图形化配置工具,简单的安装过程,完成的文档和示例。
         4.集成。企业库应用模块被设计得能够一起很好的工作,并且也被这样测试过。但是你不必一起使用他们。我们可以单独使用这些应用模块,同时这些应用模块之间也有些依赖,比如在企业库核心和Unity中的一些通用组件。 

    上面是企业库的基本概念,理解了企业库的相关知识后,我们可以开始来安装企业库了

       1、下载地址:点我进入下载页面(不是直接下载),安装后就可以使用了。

            这次5.0相比4.1的最大改动就是整个配置工具采用了WPF重新构建和实例化和管理对象生命周期的全依赖注入的实现,同时支持VS2008SP1和VS2010,话说虽然这次的配置工具变化挺大的,但是一旦熟悉了就觉得比4.1的好,因为可以清楚的看见每个模块的之间的依赖关系。

            附相关改动,还是摘自sfbirp的企业库学习笔记:

    一、Unity和对象生成器的整合
         在这个版本中,用于创建对象的基本技术是一个单一的依赖注入容器,默认的是Unity。你可以使用容器生成企业库对象的实例并注入到其他的对象。 企业库提供一个标准的接口从Unity容器中来获得定义在企业库配置中的对象的实例,如SqlDatabase或LogWriter.另外,注入友好的实 例门面处理静态门面之外是有效的,因为静态门面不能用注入,但是为了向后兼容以前的版本而存在。在本版本中的示例中都是用依赖注入,但是以前版本中是用的 静态工厂类和静态门面在这个版本中还是支持的。对象生成器,一个低版本的依赖注入机制在这个版本中被归入Unity中,在项目中不再需要单独引用对象生成 器集。
          支持Unity容器,必须引用一个被包含在企业库中的Microsoft.Practices.ServiceLocation程序集。如果要使用一个第3方的依赖注入容器,必须直接实现IServiceLocator接口或者通过适配器实现。

    二、影响所有模块的变化:
         1.在企业库中主要修正是使用依赖注入机制。所用的应用模块以及核心系统都是用依赖注入机制,并使用Unity作为默认的依赖注入容器,来创建和管理企业库对象。
         2.自主容器的实现通过实现Common Service Locator项目提供的 IServiceLocator 接口来完成。
         3.由于错误配置引发的错误将提供更多有用的错误信息。
         4.配置系统公开了一个 fluent接口,用来为单个对象或整个应用创建和填充配置源。fluent API使得为各种情景创建配置源更加容易。
         5.ConfigurationView类被删除.
         6.一些配置元素有默认值,可能不同于以前版本的隐式默认值.
         7.企业库现在允许你通过另一个配置文件合成一个混合配置文件.
         8.可以可通过不同的配置文件读取不同的配置信息.
         9.企业库不支持XAML浏览器应用程序(XBAP).
         10.WmiEnabled标志为了像前兼容仍然存在企业库中,但是在5.0中是被忽略的,而且将来会被删除.
         11.改进式的安装允许你只安装部分应用模块及配置工具.
         12.在以前版本中要做统一集成,必须添加核心企业库的扩展和每个模块的扩展。现在如果你只需要直接访问容器,那么只有核心扩展是必须的。单独模块将自动支持。
    旧的功能为了保持像前兼容仍然保留,但已经不起作用。
         13.FileConfigurationSource.Save 的签名已经改变,参数由3个变为2个。
         14.快速入门不再包含在主安装程序中。

    三、Breaking变化:
         1.企业库现在抛出了一个配置错误ActivationException,之前是System.Configuration.ConfigurationErrorsException。这包括试着解决没有配置信息错误的一个实例提供者。
         2.以前版本在获取应用模块错误时抛出BuildFailedException错误,现在对于所有的应用模块都抛出ActivationException
         3 .之前的版本,在讲一个空源传到容器来调用容器的时候,会抛出ArgumentNullException,现在抛出NullReferenceException
         4.ObjectBuilder2不再是一个单独的程序集,而是集成到了Unity集合中,在项目中也不需要引用ObjectBuilder2.dll。

         5.WMI支持已经从企业库中删除,除了在logging模块中的WMI跟踪监听器。
         6.如果你没有关闭DbDataReader,可能会导致随机的、很难在您的代码中找到的错误,尤其是当你正在一个由TransactionScope上下文创建的隐式事务下操作时。
    你必须始终确保您的应用程序及时关闭DbDataReader,无论是明确的DbDataReader.Close方法关闭或是逼迫DbDataReader释放。
          7.如果你使用 validator 特性必须引用 System.ComponentModel.DataAnnotations程序集。
          8.为FileConfigurationSource.Save方法签名已更改。该方法有两个参数,而不是3个参数
          9.Microsoft.Practices.EnterpriseLibrary.Configuration.Design.dll集合的功能和其他 设计时集合被一个新的集合 Microsoft.Practices.EnterpriseLibrary.Configuration.DesignTime.dll代替。
          10,性能计数器异常从PolicyInjection.CallHandlers移到 PolicyInjection 程序集。
          11.包含在Policy Injection Application Block中的CachingCallHandler有未处理的安全漏洞,已经从Policy Injection Application Block中移除。

    四、配置工具的改变:
          1.新的企业拥有一个新的GUI库和一个元数据驱动的可扩展性模。
          2.支持向导
          3.新的类型选择。
          4.不支持对依赖策略的Environmental Overrides 。日志模块处理Categories。
    五、缓存模块变化:
          1.缓存清除已被完全重写的性能优化
    六、数据库访问模块:
          1.ExecuteReader, ExecuteXmlReader, ExecuteScalar, and ExecuteNonQuery方法具有异步版本。
          2.包含了很多新的方法和类允许你提取数据作为对象序列。例如在合适的时候使用客户端查询技术,如LINQ.
          3.存在的方法ExecuteReader和新的方法BeginExecuteReader不接收CommandBehavior 参数。默认的当调用这些方法的时候这些方法
    会自动设置CommandBehavior 属性到reder中用来关闭连接直到指定一个事务。

    七、异常处理模块:
          1.日志异常处理重新使用日志模块的Log Writer and Trace Listeners 。这在之前版本中不是默认设置。
          2.增加一个功能,通过ExceptionManager.Process 方法接收一个默认值并返回一个值。

        在安装完企业库同时知道了5.0的变化后,就开始正式的学习了,学习的最好办法不是看企业库的源代码(我是看不懂),而是下载微软发布的学习例子

        学习例子下载地址:点我进入下载页面(不是直接下载)

        这个学习例子里面已经包含了所需的类库及代码演示(C#和VB.NET都有),同时可以右键例子中的App.config来看下例子中的模块是怎么配置的。

        同时,在学习例子的时候可以看下由http://www.entlib.com/发布的中文学习手册,虽然是4.1的,但是里面的所有内容都和5.0的例子一样(5.0只不过是重新实现了1遍),把例子和文档结合起来看学习起来就快了很多了:

         中文学习手册:点我下载

         Entlib5程序:点我进入下载页面(不是直接下载),

    到此,Entlib5的学习之路的第一步就结束了,基本上通过微软发布的学习例子和对应的中文学习手册可以对5.0的使用已经有了个基本的了解。

     文章出自:http://www.cnblogs.com/kyo-yo/archive/2010/06/07/Study-Entlib5-First.html

  • 相关阅读:
    char 型变量中能不能存贮一个中文汉字,为什么?
    抽象类(abstract class)和接口(interface)有什么异同?
    描述一下JVM加载class文件的原理机制?
    重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
    String和StringBuilder、StringBuffer的区别?
    此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    是否可以继承String类?
    两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
    laraval join 的理解
    whereHasIn方法
  • 原文地址:https://www.cnblogs.com/wuxl360/p/5753348.html
Copyright © 2020-2023  润新知