Loading

摘要: 企业库的依赖注入模块Unity是一个轻量的、可扩展的依赖注入容器,支持构造函数注入、属性注入、方法调用注入。你可以用它创建企业库的对象,或者是自定义的对象。但是,Unity模块和企业库中的其他模块有很多的不同点: 你可以在不安装企业库的情况下,直接使用Unity模块的依赖注入功能。 Unity模块可以通过配置信息来准备容器,也可以在运行的时候在代码中动态创建依赖关系。 Unity模块不依赖于企业库的核心库和企业库的配置系统,它用自己内置的方法读取配置信息,如果需要的话,也可以从企业库的配置文件中读取Unity的配置信息。 Unity模块具有下面的优点: 提供了简单的对象创建,... 阅读全文
posted @ 2011-12-14 17:31 jevan 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 加密解密模块可以满足常用的对称加解密和hash功能要求。在应用中加入模块,需要下面的步骤: 1)添加对模块的程序集引用。添加对程序集Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll的引用。 2)添加对程序集Microsoft.Practices.ObjectBuilder2.dll和Microsoft.Practices.EnterpriseLibrary.Common.dll的引用。 3)在需要模块功能的文件中引入命名空间 using Microsoft.Practices.EnterpriseLibrar... 阅读全文
posted @ 2011-12-14 17:30 jevan 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 本节主要讲述在应用中如何使用加密解密模块,包括修改配置实现特殊的任务,如何在代码中使用,例如加密数据。这一切都假定你直接使用模块,不进行修改和扩展。主要包含下面两个部分: 配置模块 在代码中使用模块 1、配置模块 1.1在配置文件右键选择【新建】-【Cryptography Application Block】 图22.1 1.2配置自动添加Cryptography Application Block节点,和Hash Providers、Symmetric Providers两个子节点,和一些默认设置。 图22.2 1.3配置模块 1.3.1在上图右侧的属性面板中,可以设置... 阅读全文
posted @ 2011-12-14 17:27 jevan 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 加解密模块使得开发者可以很容易的在应用中使用加解密的相关功能,例如,加密信息,创建一个数据的hash值,比较hash值,看看数据是否被修改。 模块具有下列功能: 减少实现标准功能的开发代码,加解密模块实现了常用的加解密功能。 在应用和跨企业之间提供一致的加解密策略。 降低了开发者为应用建立一致的加解密架构所需的学习曲线 是可扩展的,意味着它支持自定义加解密的provider 一、加解密模块简介 包括下列主题: 通用解决方案 示例代码 什么时候使用加解密模块 Key的管理和分布 选择算法 1.1通用解决方案 开发者在开发的时候,经常需要加密数据和hash功能来满足企业... 阅读全文
posted @ 2011-12-14 17:26 jevan 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 缓存模块包含下列计数器 性能计数器解释Cache Expiries/sec缓存项的过期比例Cache Hit Ratio读取缓存项的比例,一次读取指的是请求的项在缓存中。Cache Hit/sec缓存的每秒命中率Cache Misses/sec缓存的每秒丢失率,和命中率相反,就是请求项不再缓存中Cache Scavenged Item/sec缓存清除比例Total of Cache Access Attempts从缓存中读取项的总数Total Cache Entries缓存中的项总数Total Cache Expires缓存过期项的总数Total Cache Hits缓存项的命中总数Tota. 阅读全文
posted @ 2011-12-14 17:23 jevan 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 设计缓存的目的 缓存模块可以用来实现下列功能: 提供了一系列的API 它使得开发者不需要学习很多内部的工作机制,就可以将常用的缓存功能加入应用 使用企业库的配置工具很容易配置 性能高效 线程安全,内部的代码考虑到了在多个线程调用,没有非预期的内部交互。 使用后端存储,使得发生以外也可以保持数据的完整无缺。 保证了内存中的数据和后端存储保持数据同步。 本节讲述一些缓存模块设计的亮点,和设计的细节。还包括一些过期处理的设计和扫描处理的设计。 1、设计亮点 上图显示的是缓存模块中关键类之间的关系。 当你用CacheFactory初始化一个CacheManager对象的时候,... 阅读全文
posted @ 2011-12-14 17:22 jevan 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 缓存模块可以满足大部分的缓存使用情形。但是,还是会有你想要自定义一些模块行为,来满足应用特殊需求的时候。你可以通过两个方式来达到目的: 通过缓存模块提供的扩展点,扩展现有功能 修改源代码 一、扩展缓存模块 通过设计好的扩展点来扩展应用的功能。典型的方式为,写一个自定义的类,实现某个接口,或者是继承某个抽象类。因为这些自定义类是在你的应用中使用,你不需要修改和重新编译模块。 你可以自定义一种新的后端存储方式,添加一种过期策略,或者是新的CacheManager。 1.1添加新的后端存储 添加一个新类,实现IBackingStore接口,或者是继承自BaseBackingStore... 阅读全文
posted @ 2011-12-14 17:22 jevan 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 本节介绍开发者在使用缓存的时候,常用的方法。每个方法在实际开发中都可以找到对应的用处,会有代码示例。分两个部分介绍,第一个部分包括下面的一些用法: 向缓存添加数据,Add方法,如何向缓存中添加数据,设置过期,设置优先级。 从缓存中删除数据,Remove方法 从缓存中获取数据,GetData方法 清空缓存,Flush方法 第二部分介绍缓存的加载。 1.1向缓存中添加数据 需要缓存的数据,在创建和传输的时候都是很消耗性能的。例如,一个零售商的应用系统,一些列产品数据需要从数据访问组件传递给用户显示组件,然后才可以显示在用户界面。代表显示世界的实体类Products和Orders,... 阅读全文
posted @ 2011-12-14 17:21 jevan 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 配置缓存模块使用数据库作为后端存储1) 在CacheManager节点上点击右键,选择新建【Database Cache Storage】2)在配置中自动加入数据访问模块的配置信息3)点击Data Cache Storage节点,右侧的DatabaseInstance属性显示的是数据库连接字符串的名称,它和数据访问配置中的一个配置关联的,你可以通过输入或者下来来选择一个数据访问配置。可以重新命名Name属性。4)设置PartitionName属性,这个标识在CacheManager中将会使用。通过在CacheManager上的右键菜单,可以选择新建其他类型的后端存储。注意点:缓存配置的属性值. 阅读全文
posted @ 2011-12-14 17:19 jevan 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 服务器场中的缓存使用 单一的CacheManager不能跨应用程序域共享。服务端应用大多部署在多台服务器上,每台服务器的内存中都有一份缓存的数据。对于一台机器上面有多个进程,也是一样的,包括每个运行在自己的进程中的企业组件,每个进程都有一份缓存的数据。 不同的应用不能使用同一个数据库作为后端存储,在同一个数据库作为不同的应用的后端存储,可能会导致不可预料的问题,不推荐这么做。 当在多个进程中运行相同应用的时候(例如,应用被部署在服务器场的环境中),你可以选用下面的一种配置。 1)所有的应用实例使用同一个数据库实例,但是应用的每个实例使用不同的数据库分区。 2)所有的应用实例使用同一... 阅读全文
posted @ 2011-12-14 17:19 jevan 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 企业库的缓存模块允许开发者在应用中包含本地缓存。它支持内存缓存,内存中缓存的数据,可以用数据库或者其他分离的存储作为后端数据存储。缓存模块可以不经修改而直接使用,它提供了获取数据、添加数据到缓存、清空缓存中的数据所需的全部方法。同样支持可配置的缓存过期和清除策略。 在构建企业级分布式应用的时候,架构师和开发者将会面对许多挑战。缓存可以帮助他们克服下面的一些挑战: 性能,缓存通过存储和数据消费者最相关的数据,可以提升应用的性能。避免了重复的数据创建,处理和传输。 可扩展性,在缓存中存储资源帮助节省资源,在有增加应用的需要情况下,提高可扩展性。 可获得性,在本地存储数据,应用在网络发生... 阅读全文
posted @ 2011-12-14 17:17 jevan 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 本节讲述如何在开发应用的过程中使用缓存模块。包括配置缓存模块,在解决方案中引入缓存模块,选择后端存储。 配置缓存模块 添加应用代码 选择后端存储 所有的模块都包括程序集和一份源代码。如果你想使用源代码,在使用QuickStart和配置工具之前需要编译源代码。 1.添加配置信息 如果你是用数据访问模块作为后端存储的访问手段,在配置缓存模块之前需要先配置数据访问模块。 打开企业库安装目录的EntLibConfig.exe工具,如下图所示,首先新建应用,可以通过工具的file菜单中的New Application,然后如图所示创建缓存模块的配置节。 会自动添加Cache Mana... 阅读全文
posted @ 2011-12-14 17:17 jevan 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 一、Provider 在.NET frameword中每一个provider都是一段代码的中间人,通过它,你的应用可以连接到一个服务或者是数据源,可以获取或者是修改服务和数据源的数据。在企业库中包含很多的providers。另外,你也可以创建自己的provider,在你的应用中满足特殊的需求。 一个provider type定义了和一个模块相关的功能的接口,一个provider是一个provider type的实现。每一个模块中,对于一个provider type,都实现了很多的provider。也可以为模块添加自定义的provider。 通过特殊的实现来分离模块的功能,可以达到下面... 阅读全文
posted @ 2011-12-14 17:15 jevan 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 在设计整个企业库的过程中,使用了一系列的最佳实践。下面列出一些里面的最佳实践: 在核心库中使用了Common模块 使用了统一的命名约定和统一的版本 在设计的过程中使用单元测试 在所有模块中包含基础结构 在企业库的模块中包含了下面的模式,当然还包括其他模式: 工厂模式,一个创建型模式,使用指定的类型创建另外一个对象。 插件模式,这种模式扩展了类的行为。在特殊的环境中创建一个子类,只包含所需的功能。 依赖注入模式,使用这个模式,你可以在类中注入对象,而不是依赖类创建对象。 一、工厂模式 工厂模式是软件设计模式中,创建模式的一种。企业库中广泛的使用了工厂模式。例如,在Cachi... 阅读全文
posted @ 2011-12-14 17:14 jevan 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 在企业库的很多模块中都实现了很多常用的功能,他们同样对企业库以外的应用代码也很有用。例如,数据序列化和访问配置信息。为了提供可用性,这些代码都放在企业库核心的Common程序集中。 另外,所有的模块都被设计为最小的依赖,以便他们可以单独使用。除了Unity,所有的企业库都依赖于企业库的核心库,核心库包含了下面的子系统: Common程序集 模块的仪表盘,模块的运行情况 配置信息的帮助类,和设计时支持组件 1、Common程序集 企业库中包含一个叫做Common的程序集,里面包含了一些被其他模块使用的,非常有用的功能。使用企业库的任何一个模块(除去Unity模块)都需要添加对这个... 阅读全文
posted @ 2011-12-14 17:14 jevan 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 2010-04-18 15:28 by Virus-BeautyCode, 1693 visits, 收藏, 编辑 企业库包含很多的程序集,除去Unity模块,企业库的每个程序集的名称都以“Microsoft.Practices.EnterpriseLibrary”开头。另外,其他的模块都可能会依赖企业库的Common程序集。使用一个模块的应用也可能会需要其他模块的程序集,例如使用Caching模块,有可能会需要Data Access模块的程序集。 在应用中使用企业库,可以用下面的两种方式来部署企业库的程序集。 在应用程序的目录中,作为应用的私有程序集。 放在文件系统的共享目录,或者是... 阅读全文
posted @ 2011-12-14 17:13 jevan 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 3.3通过配置指定和Unity的整合 另外一种方法是在配置源中指定配置的需要,你可以指定下面的一条或者多条: 你可以在Unity配置中指定想要的BlockExtensions 你可以在Unity配置中的type配置节指定如何创建企业库对象,指定类型映射的关系,例如,当使用resolve方法的时候返回一个SqlDatabase,或者是返回指定的注入Database对象。也可以指定生命周期和其他构造策略。 企业库的配置Scheme和Unity的配置Scheme是独立的。但是你可以将Unity的配置节信息和企业库的配置信息放在同一个文件中,例如Unity配置中的一个或者多个容器,返回类型,映... 阅读全文
posted @ 2011-12-14 17:11 jevan 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 3.2使用Unity模块创建企业库对象 下面介绍如何使用前面的方法获取企业库对象的实例。代码示例如下 IUnityContainercontainter=newUnityContainer();containter.AddNewExtension<EnterpriseLibraryCoreExtension>(); 首先创建一个Unity容器,并且添加企业库核心配置扩展。 默认情况下,这个扩展会从应用的配置文件(app.config和web.config)中读取配置信息。如果你使用自定义的配置源,你可以使用下面的代码创建容器并添加配置扩展。 Code highlighting pr 阅读全文
posted @ 2011-12-14 17:08 jevan 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 一、创建应用模块对象 在你的应用中经常会需要创建例如Database或者是CacheManager之类的对象,企业库支持一系列的方法,可以创建应用需要的对象。 你可以使用工厂方法创建这些对象,企业库的在每一个功能模块和核心库都包含有工厂方法来完成这个任务。这些静态的工厂方法自动读取应用的配置信息,provider的工厂方法允许你手工在配置文件中创建适当的配置,然后用工厂方法在代码中创建provider。 还有,你也可以创建配置信息中没有描述的对象。例如,通过在构造函数中添加数据库连接信息,你可以创建一个SqlDatabase对象。 另外,企业库4.1还包含了一个轻量的、可以扩展的,支持... 阅读全文
posted @ 2011-12-14 17:07 jevan 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 一、企业库的主要内容 企业库是一个可重用的组件集合,同时也是一个受支持的基础框架。企业库包含的内容: 企业库功能模块 企业库核心 企业库配置工具 对象创建和依赖注入方法 工具集,示例,和开发指导 二、强命名企业库程序集 如果你使用源代码生成企业库程序集,你就要考虑是否给程序集添加强命名。强命名由程序集的标识组成,包括一个名称,版本号,和一个可选的区域信息,加上一个公共的key和一个签名。 强命名的程序集可以保证唯一性,可以添加到GAC中,可以保证你的应用使用了正确版本的程序集。可以使用Visual Studio创建强命名程序集,在项目的右键菜单中选择属性,然后添加签名就可以了... 阅读全文
posted @ 2011-12-14 17:02 jevan 阅读(252) 评论(0) 推荐(0) 编辑