12 2011 档案
摘要:1、mount语法:mount(type, location, mount_point);说明:type="MTD" location="<partition>" 挂载yaffs2文件系统分区;type="vfat" location="/dev/block/<whatever>" 挂载设备。例如:mount("MTD", "system", "/system");挂载system分区,设置返回指针"/system”mou
阅读全文
摘要:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8&q
阅读全文
摘要:三层体系结构的概念用户界面表示层(USL)业务逻辑层(BLL)数据访问层(DAL)BLL将USL与DAL隔开了,并且加入了业务规则各层的作用1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如
阅读全文
摘要:Web.config 文件通常包括根据应用程序的运行环境而必须不同的设置。例如,在部署 Web.config 文件时,您可能必须更改数据库连接字符串或禁用调试。对于 Web 应用程序项目,ASP.NET 提供了一些工具,用于自动完成在部署这些项目时更改(转换)Web.config 文件的过程。对于要部署到的每个环境,您将创建一个转换文件,该文件仅指定原始 Web.config 文件和适用于该环境的已部署 Web.config 文件之间的差异。转换文件是一个 XML 文件,该文件指定在部署 Web.config 文件时应如何更改该文件。转换操作通过使用在XML-Document-Transfor
阅读全文
摘要:(一).选择会话状态存储方式 在Webconfig文件配置: <sessionState mode="???" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20"/> Asp.net有三种方式存储会话状态信息: 1. 存储在进程中: 属性mode =
阅读全文
摘要:/// <head>///<function>/// 存储类(存储UserInfo信息)///</function>///<description>/// 用Cache存储用户信息/// 在指定间隔(TimeOut)内取,则可以从Cache中取,/// 如果超出存储时间,则从数据库取用户信息数据/// 作為所有用户信息的存儲類.///</description>///<author>///<name>ChengKing</name> ///</author>/// </head&g
阅读全文
摘要:到目前为止,我们使用的模块都是在同一个配置文件中,这显然是不灵活的,我们希望每个功能模块能独立的在一个配置文件中体现,这样不仅易于管理,易于扩展,也易于阅读和分类.企业库当然考虑到了这个问题并且提供了解决方案,本章就是讲解如何使用Configuration Application Block来将各个模块分割到独立的配置文件中的.和以前一样,我们先提需求,再用实例做讲解,这样比较形象生动些: 1)创建一个工程,里面用到企业库的Data 数据访问模块和Log日志处理模块 2)2个模块的配置分别保存在不同的配置文件中(Data.config和Log.config中) 3)在程序中调用这2个模块...
阅读全文
摘要:代理对象(Proxy Object)会通过Handler链定位到真实对象(Real Object),而Policy则被注入到代理对象和真实对象中。整个流程如图:我个人对Policy Injection Application Block使用的看法是:用户先创建一个代理,用这个代理间接操作实体,在调用实体的方法或者成员属性时可以透明的触发一系列设置好的Handler(如日记记录,身份验证等),并且只需要修改相应的配置文件就能快速更改Handler链.(因为是个人看法,也许不太准确,官方解释在此http://msdn.microsoft.com/en-us/library/ff647463.asp
阅读全文
摘要:依赖注入容器Unity:Unity的构造类似于Castle中的IOC(控制反转 或者叫依赖注入)容器,我们使用抽象接口来隔离使用者和具体实现之间的依赖关系,但是不管再怎么抽象,最终还是要创建具体实现类的实例,这种创建具体实现类的实例对象就会造成对于具体实现的依赖,为了消除这 种创建依赖性,需要把依赖移出到程序的外部(比如配置文件)。使用依赖注入后,这些类完全是基于抽象接口编写而成的,所以可以最大限度地适应需求的变化。 依赖注入的形式有三种,分别为构造子注入(Constructor Injection)、设值方法注入(Setter Injection)和接口注入(Interface Inject
阅读全文
摘要:使用企业库异常处理应用程序模块的优势:它支持整个应用程序体系结构层的异常处理,而不仅限于服务接口的界限。它使得异常处理策略可以在管理层定义和维护,以便决策人员(可能是系统管理员和开发人员)可以定义如何处理异常。他们可以维护和修改控制异常处理的规则集,而无需更改块的应用程序代码。它提供了常用的异常处理功能,例如记录异常信息的功能、通过将原始异常替 换为其他异常来隐藏敏感信息的功能,以及通过将原始异常打包到另一个异常中来添加异常的上下文信息的功能。这些功能封装在名为 Exception handlers 的 .NET 类中。它可以合并多个异常处理程序以产生某个异常所需的响应,例如先记录异常信 息,
阅读全文
摘要:开发人员经常编写需要安全功能的应用程序。这些应用程序通常需要执行一系列不同的安全操作,而且它们还经常与不同的基础安全提供程序(如 Microsoft Active Directory 目录服务、授权管理器、Active Directory 应用程序模式 (ADAM) 和自定义数据库等)进行交互。 安全应用程序块通过收集开发人员必须执行的许多最常见的安全任务,来简化开发人员的工作。每个任务都以一致的方式处理,从特定的安全提供程序中抽象出应用 程序代码并使用最佳做法。您甚至可以通过更改配置来更改基础提供程序,而无需更改基础应用程序代码。验证应用程序块功能框架如下图所示: 几个基本概念:(1) Ti
阅读全文
摘要:企业库数据库访问模块通过抽象工厂模式,允许用户通过简单的配置选择不同的数据库作为程序的数据源,大大解决了切换数据库时带来的麻烦.因为我本机只安装了SQL Server 2005,所以在此只做SQL的演示,需要深究的朋友可以访问以下网站:http://msdn.microsoft.com/en-us/library/ff664408%28v=PandP.50%29.aspx企业库数据库访问模块的几大功能:1. 最简单的功能,通过ExecuteNonQuery.方法执行SQL语句.2. 执行ExecuteDataSet,返回DataSet类型的数据集.3. 执行ExecuteScalar,获取返回
阅读全文
摘要:企业库日志应用程序模块工作原理图:从上图我们可以看清楚企业库日志应用程序模块的工作原理,其中LogFilter,Trace Source,Trace Listener,Log Formatter的信息都可以在Category配置文件中反映出来,通过配置文件,调用LogWriter类的Writer方法,就可以将包含日志信息的LogEntry实体写入Category配置文件中指定的设备了.企业库日记应用程序模块提供了下列几种记录方法:The event logAn e-mail messageA databaseA message queueA text fileA Windows®Ma
阅读全文
摘要:企业库验证应用程序模块之配置文件模式:1. 新建一个控制台应用程序,并创建一个Customer类,其代码如下所示:using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;using Microsoft.Practices.EnterpriseLibrary.Validation;namespace ConsoleApplication1{ class ...
阅读全文
摘要:企业库提供了一个很强大的验证应用程序模块,特点是:可以通过配置为你的程序中特定的类来定义规则集.是为你的类的公有属性,即对外开放的属性进行验证的.使用企业库验证应用程序模块的优势:有助于保持一致的验证方法。包括大多数标准验证,包括.NET数据类型校验.它让您可以将多个规则集具有相同的类和该类的成员.它可以让你申请一个或多个规则集时,您验证的对象.企业库验证应用程序模块提供了下列几种验证方法:And CompositeValidatorContainsCharacters ValidatorDate Time RangeValidatorDomain ValidatorEnum Conversi
阅读全文
摘要:本章介绍的是企业库加密应用程序模块Cryptographyproviders中为对称加密配置Key文件的3种方式:create a new key : 使用一串字符串作为Key,然后通过加密保存到一个Key文件中.use an existing DPAPI-protected key file : 使用一个现有的Key文件进行配置.import a password-protected key file : 对导出的Key文件再进行一次Password加密.废话少说,现在就开始看看如何使用它们吧:一.Create a new key 1.运行EntLibConfig.exe,选择Blocks.
阅读全文
摘要:企业库加密应用程序模块提供了2种方式让用户保护自己的数据:Hashingproviders: 离散加密法, 简单来说就是把你的信息保存到内存中后用一个离散值表示并返回给程序,这样在程序中只能看到离散值而不是明文,这样就起到简单的加密效果啦.Cryptographyproviders: 密钥加密法. 用对称加密方法对数据进行加密(尚未支持非对称加密).使用企业库加密应用程序模块的优势:减少了需要编写的模板代码,执行标准的任务,可以用它来解决常见的应用程序加密的问题.有助于维持一个应用程序内和跨企业的数据传输加密.允许管理员进行加密配置,包括使用组策略.可扩展,支持用户自定义加密技术.下面介绍如何
阅读全文
摘要:本篇文章具体官方解释请参照以下链接: http://msdn.microsoft.com/en-us/library/ff664753%28v=PandP.50%29.aspxMicrosoftEnterprise Library 5.0下载地址: http://www.microsoft.com/downloads/details.aspx?FamilyId=bcb166f7-dd16-448b-a152-9845760d9b4c&displaylang=enMicrosoftEnterprise Library 5.0 Documentation : http://entlib.c
阅读全文
摘要:使用DataSet进行工作 使用Database类的ExecuteDataSet方法获取DataSet对象,在DataSet对象中,默认的表名称依次为Table,Table1,Table2.。。。。。。。。。。。。 如果你想要将数据加载到一个已经存在的DataSet对象中,可以使用LoadDataSet方法。 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->DataSetproductDataSet;//UsingaSQLstatement.
阅读全文
摘要:以对象形式从数据库获取数据 现代的很多编程技术都集中在“数据就是对象”这个概念。如果你在应用层之间使用Data Transfer Objects (DTOs)传输数据的话,这个方法就很有用,使用ORM实现一个数据访问层,或者是客户端查询技术,例如LINQ。 数据库访问模块实现了这个功能,允许你执行SQL或者是存储过程,可以返回一个对象序列,但是要求序列实现IEnumerable接口。 关于Accessors 模块提供了两个方法来实现这种查询要求,SprocAccessor和SqlStringAccessor。你可以使用Database类的ExecuteSprocAccessor和E...
阅读全文
摘要:前言 鉴于企业库5.0已经发布正式版,同时有广大读者的要求(臭屁一下,o(∩_∩)o...),后面文章的内容和代码将基于Enterprise Library5.0和Unity2.0来写,感谢大家的一贯支持。 正文 数据库访问模块都能实现哪些功能呢?数据库访问模块抽象类你正在使用的数据库,提供了一些列接口,使得你可以更容易的实现常用的数据库访问功能。例如:使用Database类填充DataSet数据集,用database类获取一个适当的Command实例,然后调用database的ExecuteDataSet方法,就可以填充数据集。不需要你调用DataAdapter的Fill方法。Ex...
阅读全文
摘要:模块Unity是一个轻量的、可扩展的依赖注入容器,支持构造函数注入、属性注入、方法调用注入。你可以用它创建企业库对象,也可以创建自定义的业务对象。Unity和企业库中的其他模块有一些不同点: 你可以独立的使用Unity模块来实现依赖注入技术,不需要其他模块的辅助。 Unity支持用配置文件来准备容器,也支持在运行的时候用代码动态注册依赖关系。 Unity和企业库的核心库没有依赖关系。它包含了内置的配置信息读取方法,如果需要的话,这些配置信息也可以从企业库的配置中读取。 本节包含下面的内容 简介 在应用中使用Unity 典型的解决方案 设计Unity的目的 扩展和修改U...
阅读全文
摘要:上图是一个日志模块的基本配置,本节我们就来讲述一些关于他的内容和代码示例。 默认情况下,在web.config文件中的配置信息是明文的,你可以用.NET自带的加密解密保护机制将配置信息加密,也可以用企业库提供的保护机制。在配置工具中就可以选择,如下图所示 无论你选择那一种,保存之后,你打开web.config文件,就会发现原来明文的日志配置节,变成了下面的加密格式(不用开发者操心解密的事情,用的时候自动解密)。 企业库的日志模块可以将日志信息以多种形式来记录,系统事件、文本文件、电子邮件、事件查看器、数据库、消息队列,xml格式等,如下图所示建立日志记录的形式。 如上图所示,在T...
阅读全文
摘要:日志模块企业库的日志模块简单的实现了日志功能的常用功能。开发者可以利用模块在下面的位置记录信息: 事件日志 电子邮件 数据库 消息队列 文本文件 WMI的事件查看器 自定义的位置模块为记录在任何位置的日志信息都提供了一系列接口。在你的应用中不需要指明信息的目的地。配置信息决定了是否记录日志,以及日志记录的位置。这就意味着开发者不需要修改应用代码就可以变更日志的行为。 本节包含下面的内容: 简介 使用模块进行开发 典型解决方案 模块的设计目的 扩展和修改模块 部署和实施模块 示例代码 1、 简介通过下面的主题,你可以发现模块是否适合于你。常用方案开发者在开发过程中经常需要日志功能。典型的,响应.
阅读全文
摘要:本篇讲述如何在应用中使用数据访问模块。首先,讲述如何配置模块并且和应用整合;其次是,如何使用数据访问模块完成常用的功能,例如,获取单条数据,或者是使用DataSet返回多条数据;最后,讲述一些关系连接管理、参数处理、异常处理的主题。 主要包括下面的主题: 配置模块 在应用中添加代码 创建Database对象 创建DbCommand对象 管理连接 使用TransactionScope类 创建分布式的数据库应用 异常处理 参数处理 1、配置模块 默认情况下,配置信息是不加密的,里面的用户名和密码等敏感信息是明文的。虽然config文件从外界是访问不到的,但是还是...
阅读全文
摘要:Unity模块对我来说学习起来还是有一定的难度的,很多东西都是第一次学习,有些东西理解的不透侧,所以Unity后面的内容想要等自己继续理解一下,后面给大家补充回来吧,先开始后面的章节。大概看了一下Unity后面的内容,计划给它留下四篇blog的地方,所以数据访问模块从三十一开始,感谢大家的支持。 下面我们回到正题。 Data Access Appliction Block 简介 企业库的数据访问模块实现了常用了数据访问功能,简化了这部分的开发工作。应用可以在各种情况下使用本模块,例如,从数据库读取数据用来显示、通过应用层传递数据、提交数据给数据库系统。模块支持存储过程和SQL语句,常...
阅读全文
摘要:配置运行时支持数组 classFoot{publicFoot(IBar[]bars){}}container.Configure<InjectedMembers>().ConfigureInjectionFor<Foot>(newInjectionConstructor(newResolvedArrayParameter<IBar>());Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->container.
阅读全文
摘要:Unity模块的亮点 Unity模块包括了下面的特点 提供了一个创建对象,以及依赖的对象的方法 提供的RegisterType方法用来在容器中注册类型和映射,Resolve方法可以返回任何依赖对象的实例。 提供控制反转IOC功能,通过预先配置注入类的对象来实现。你可以在构造函数中指明一个类或者接口(构造函数注入),或者是使用attribute的属性注入,和方法调用注入。 支持容器继承,容器可以有子容器,支持对象从子容器传递到父容器中。 可以从标准的配置文件中读取信息,例如xml文件 对类的定义没有任何要求。在类上不需要添加attribute(除非使用属性注入或者是方法调用注入),...
阅读全文
摘要:企业库的依赖注入模块Unity是一个轻量的、可扩展的依赖注入容器,支持构造函数注入、属性注入、方法调用注入。你可以用它创建企业库的对象,或者是自定义的对象。但是,Unity模块和企业库中的其他模块有很多的不同点: 你可以在不安装企业库的情况下,直接使用Unity模块的依赖注入功能。 Unity模块可以通过配置信息来准备容器,也可以在运行的时候在代码中动态创建依赖关系。 Unity模块不依赖于企业库的核心库和企业库的配置系统,它用自己内置的方法读取配置信息,如果需要的话,也可以从企业库的配置文件中读取Unity的配置信息。 Unity模块具有下面的优点: 提供了简单的对象创建,...
阅读全文
摘要:加密解密模块可以满足常用的对称加解密和hash功能要求。在应用中加入模块,需要下面的步骤: 1)添加对模块的程序集引用。添加对程序集Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll的引用。 2)添加对程序集Microsoft.Practices.ObjectBuilder2.dll和Microsoft.Practices.EnterpriseLibrary.Common.dll的引用。 3)在需要模块功能的文件中引入命名空间 using Microsoft.Practices.EnterpriseLibrar...
阅读全文
摘要:本节主要讲述在应用中如何使用加密解密模块,包括修改配置实现特殊的任务,如何在代码中使用,例如加密数据。这一切都假定你直接使用模块,不进行修改和扩展。主要包含下面两个部分: 配置模块 在代码中使用模块 1、配置模块 1.1在配置文件右键选择【新建】-【Cryptography Application Block】 图22.1 1.2配置自动添加Cryptography Application Block节点,和Hash Providers、Symmetric Providers两个子节点,和一些默认设置。 图22.2 1.3配置模块 1.3.1在上图右侧的属性面板中,可以设置...
阅读全文
摘要:加解密模块使得开发者可以很容易的在应用中使用加解密的相关功能,例如,加密信息,创建一个数据的hash值,比较hash值,看看数据是否被修改。 模块具有下列功能: 减少实现标准功能的开发代码,加解密模块实现了常用的加解密功能。 在应用和跨企业之间提供一致的加解密策略。 降低了开发者为应用建立一致的加解密架构所需的学习曲线 是可扩展的,意味着它支持自定义加解密的provider 一、加解密模块简介 包括下列主题: 通用解决方案 示例代码 什么时候使用加解密模块 Key的管理和分布 选择算法 1.1通用解决方案 开发者在开发的时候,经常需要加密数据和hash功能来满足企业...
阅读全文
摘要:缓存模块包含下列计数器 性能计数器解释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.
阅读全文
摘要:设计缓存的目的 缓存模块可以用来实现下列功能: 提供了一系列的API 它使得开发者不需要学习很多内部的工作机制,就可以将常用的缓存功能加入应用 使用企业库的配置工具很容易配置 性能高效 线程安全,内部的代码考虑到了在多个线程调用,没有非预期的内部交互。 使用后端存储,使得发生以外也可以保持数据的完整无缺。 保证了内存中的数据和后端存储保持数据同步。 本节讲述一些缓存模块设计的亮点,和设计的细节。还包括一些过期处理的设计和扫描处理的设计。 1、设计亮点 上图显示的是缓存模块中关键类之间的关系。 当你用CacheFactory初始化一个CacheManager对象的时候,...
阅读全文
摘要:缓存模块可以满足大部分的缓存使用情形。但是,还是会有你想要自定义一些模块行为,来满足应用特殊需求的时候。你可以通过两个方式来达到目的: 通过缓存模块提供的扩展点,扩展现有功能 修改源代码 一、扩展缓存模块 通过设计好的扩展点来扩展应用的功能。典型的方式为,写一个自定义的类,实现某个接口,或者是继承某个抽象类。因为这些自定义类是在你的应用中使用,你不需要修改和重新编译模块。 你可以自定义一种新的后端存储方式,添加一种过期策略,或者是新的CacheManager。 1.1添加新的后端存储 添加一个新类,实现IBackingStore接口,或者是继承自BaseBackingStore...
阅读全文
摘要:本节介绍开发者在使用缓存的时候,常用的方法。每个方法在实际开发中都可以找到对应的用处,会有代码示例。分两个部分介绍,第一个部分包括下面的一些用法: 向缓存添加数据,Add方法,如何向缓存中添加数据,设置过期,设置优先级。 从缓存中删除数据,Remove方法 从缓存中获取数据,GetData方法 清空缓存,Flush方法 第二部分介绍缓存的加载。 1.1向缓存中添加数据 需要缓存的数据,在创建和传输的时候都是很消耗性能的。例如,一个零售商的应用系统,一些列产品数据需要从数据访问组件传递给用户显示组件,然后才可以显示在用户界面。代表显示世界的实体类Products和Orders,...
阅读全文
摘要:配置缓存模块使用数据库作为后端存储1) 在CacheManager节点上点击右键,选择新建【Database Cache Storage】2)在配置中自动加入数据访问模块的配置信息3)点击Data Cache Storage节点,右侧的DatabaseInstance属性显示的是数据库连接字符串的名称,它和数据访问配置中的一个配置关联的,你可以通过输入或者下来来选择一个数据访问配置。可以重新命名Name属性。4)设置PartitionName属性,这个标识在CacheManager中将会使用。通过在CacheManager上的右键菜单,可以选择新建其他类型的后端存储。注意点:缓存配置的属性值.
阅读全文
摘要:服务器场中的缓存使用 单一的CacheManager不能跨应用程序域共享。服务端应用大多部署在多台服务器上,每台服务器的内存中都有一份缓存的数据。对于一台机器上面有多个进程,也是一样的,包括每个运行在自己的进程中的企业组件,每个进程都有一份缓存的数据。 不同的应用不能使用同一个数据库作为后端存储,在同一个数据库作为不同的应用的后端存储,可能会导致不可预料的问题,不推荐这么做。 当在多个进程中运行相同应用的时候(例如,应用被部署在服务器场的环境中),你可以选用下面的一种配置。 1)所有的应用实例使用同一个数据库实例,但是应用的每个实例使用不同的数据库分区。 2)所有的应用实例使用同一...
阅读全文
摘要:企业库的缓存模块允许开发者在应用中包含本地缓存。它支持内存缓存,内存中缓存的数据,可以用数据库或者其他分离的存储作为后端数据存储。缓存模块可以不经修改而直接使用,它提供了获取数据、添加数据到缓存、清空缓存中的数据所需的全部方法。同样支持可配置的缓存过期和清除策略。 在构建企业级分布式应用的时候,架构师和开发者将会面对许多挑战。缓存可以帮助他们克服下面的一些挑战: 性能,缓存通过存储和数据消费者最相关的数据,可以提升应用的性能。避免了重复的数据创建,处理和传输。 可扩展性,在缓存中存储资源帮助节省资源,在有增加应用的需要情况下,提高可扩展性。 可获得性,在本地存储数据,应用在网络发生...
阅读全文
摘要:本节讲述如何在开发应用的过程中使用缓存模块。包括配置缓存模块,在解决方案中引入缓存模块,选择后端存储。 配置缓存模块 添加应用代码 选择后端存储 所有的模块都包括程序集和一份源代码。如果你想使用源代码,在使用QuickStart和配置工具之前需要编译源代码。 1.添加配置信息 如果你是用数据访问模块作为后端存储的访问手段,在配置缓存模块之前需要先配置数据访问模块。 打开企业库安装目录的EntLibConfig.exe工具,如下图所示,首先新建应用,可以通过工具的file菜单中的New Application,然后如图所示创建缓存模块的配置节。 会自动添加Cache Mana...
阅读全文
摘要:一、Provider 在.NET frameword中每一个provider都是一段代码的中间人,通过它,你的应用可以连接到一个服务或者是数据源,可以获取或者是修改服务和数据源的数据。在企业库中包含很多的providers。另外,你也可以创建自己的provider,在你的应用中满足特殊的需求。 一个provider type定义了和一个模块相关的功能的接口,一个provider是一个provider type的实现。每一个模块中,对于一个provider type,都实现了很多的provider。也可以为模块添加自定义的provider。 通过特殊的实现来分离模块的功能,可以达到下面...
阅读全文
摘要:在设计整个企业库的过程中,使用了一系列的最佳实践。下面列出一些里面的最佳实践: 在核心库中使用了Common模块 使用了统一的命名约定和统一的版本 在设计的过程中使用单元测试 在所有模块中包含基础结构 在企业库的模块中包含了下面的模式,当然还包括其他模式: 工厂模式,一个创建型模式,使用指定的类型创建另外一个对象。 插件模式,这种模式扩展了类的行为。在特殊的环境中创建一个子类,只包含所需的功能。 依赖注入模式,使用这个模式,你可以在类中注入对象,而不是依赖类创建对象。 一、工厂模式 工厂模式是软件设计模式中,创建模式的一种。企业库中广泛的使用了工厂模式。例如,在Cachi...
阅读全文
摘要:在企业库的很多模块中都实现了很多常用的功能,他们同样对企业库以外的应用代码也很有用。例如,数据序列化和访问配置信息。为了提供可用性,这些代码都放在企业库核心的Common程序集中。 另外,所有的模块都被设计为最小的依赖,以便他们可以单独使用。除了Unity,所有的企业库都依赖于企业库的核心库,核心库包含了下面的子系统: Common程序集 模块的仪表盘,模块的运行情况 配置信息的帮助类,和设计时支持组件 1、Common程序集 企业库中包含一个叫做Common的程序集,里面包含了一些被其他模块使用的,非常有用的功能。使用企业库的任何一个模块(除去Unity模块)都需要添加对这个...
阅读全文
摘要:2010-04-18 15:28 by Virus-BeautyCode, 1693 visits, 收藏, 编辑 企业库包含很多的程序集,除去Unity模块,企业库的每个程序集的名称都以“Microsoft.Practices.EnterpriseLibrary”开头。另外,其他的模块都可能会依赖企业库的Common程序集。使用一个模块的应用也可能会需要其他模块的程序集,例如使用Caching模块,有可能会需要Data Access模块的程序集。 在应用中使用企业库,可以用下面的两种方式来部署企业库的程序集。 在应用程序的目录中,作为应用的私有程序集。 放在文件系统的共享目录,或者是...
阅读全文
摘要:3.3通过配置指定和Unity的整合 另外一种方法是在配置源中指定配置的需要,你可以指定下面的一条或者多条: 你可以在Unity配置中指定想要的BlockExtensions 你可以在Unity配置中的type配置节指定如何创建企业库对象,指定类型映射的关系,例如,当使用resolve方法的时候返回一个SqlDatabase,或者是返回指定的注入Database对象。也可以指定生命周期和其他构造策略。 企业库的配置Scheme和Unity的配置Scheme是独立的。但是你可以将Unity的配置节信息和企业库的配置信息放在同一个文件中,例如Unity配置中的一个或者多个容器,返回类型,映...
阅读全文
摘要:3.2使用Unity模块创建企业库对象 下面介绍如何使用前面的方法获取企业库对象的实例。代码示例如下 IUnityContainercontainter=newUnityContainer();containter.AddNewExtension<EnterpriseLibraryCoreExtension>(); 首先创建一个Unity容器,并且添加企业库核心配置扩展。 默认情况下,这个扩展会从应用的配置文件(app.config和web.config)中读取配置信息。如果你使用自定义的配置源,你可以使用下面的代码创建容器并添加配置扩展。 Code highlighting pr
阅读全文
摘要:一、创建应用模块对象 在你的应用中经常会需要创建例如Database或者是CacheManager之类的对象,企业库支持一系列的方法,可以创建应用需要的对象。 你可以使用工厂方法创建这些对象,企业库的在每一个功能模块和核心库都包含有工厂方法来完成这个任务。这些静态的工厂方法自动读取应用的配置信息,provider的工厂方法允许你手工在配置文件中创建适当的配置,然后用工厂方法在代码中创建provider。 还有,你也可以创建配置信息中没有描述的对象。例如,通过在构造函数中添加数据库连接信息,你可以创建一个SqlDatabase对象。 另外,企业库4.1还包含了一个轻量的、可以扩展的,支持...
阅读全文
摘要:一、企业库的主要内容 企业库是一个可重用的组件集合,同时也是一个受支持的基础框架。企业库包含的内容: 企业库功能模块 企业库核心 企业库配置工具 对象创建和依赖注入方法 工具集,示例,和开发指导 二、强命名企业库程序集 如果你使用源代码生成企业库程序集,你就要考虑是否给程序集添加强命名。强命名由程序集的标识组成,包括一个名称,版本号,和一个可选的区域信息,加上一个公共的key和一个签名。 强命名的程序集可以保证唯一性,可以添加到GAC中,可以保证你的应用使用了正确版本的程序集。可以使用Visual Studio创建强命名程序集,在项目的右键菜单中选择属性,然后添加签名就可以了...
阅读全文
摘要:企业库4.0和4.1的主要改进是加入了全新的,而且很容易使用的对象创建方式,包括其他的依赖对象。这个功能在企业库的Unity模块中通过依赖注入暴露,它使用了下面这些常用的设计模式。 Dependency Injection依赖注入 Inversion of Control(IoC)反转控制 Service Locator服务定位 Service Container服务容器 Factory工厂模式 Builder创建者模式 一、企业库中的对象创建和依赖注入 开始之初,企业库中的应用模块,核心模块、配置系统,用户自己的一个用,一直都使用微软Patterns & Practices ...
阅读全文
摘要:一、迁移和并行使用 通常来说,企业库是建立在.NET 2.0 的基础上,使用后续版本的企业库也不需要改变任何代码。不需要将引用更新到新的程序集,也不需要在配置文件中指明程序集的正确版本。 这个版本4.1的企业库可以和以前版本的企业库同时安装,你可以将使用新版本的应用程序和使用旧版本的应用程序一起部署。也你可以一次性的将现有应用的企业库应用升级到新版本。 如果你选择并行使用不同版本的企业库,你一定要将他们部署在不同的文件夹。在任何情况下,不能将不同版本的企业库程序集混合在一起。例如,你不能将4.0的Data Access相关程序集和3.0的Caching相关程序集放在一个目录。 可以在应...
阅读全文
摘要:在4.1中你可以使用Unity Application Block(Unity)在函数或者是功能运行之前或者之后拦截企业库的对象,生成这些对象,并且将他们注入到其他对象中。 企业库中包含了很多的类,允许你从Unity容器中获取在企业库配置中定义的,类似SqlDatabase或者是CacheManager对象的实例。另外,一些有好的注入代替了过去的静态方法。使用Unity的依赖注入能力可以很好的简化你的代码。 使用4.1的系统需要 windows xp,2003,2008,vista .NET FRAMEWORK 3.5或者更高 VS208 一、框架的依赖关系 准确的说就是程序集的...
阅读全文
摘要:Enterprise Library for .Net Framework 3.5 – EntLib v4.1 是patterns & practices 小组为.NET Framework 3.5 开发一套企业库,该企业库的设计思想是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题。目前最新版本为v4.1,共包括9个 Application Block,包括数据访问(Data Access Application Block)、异常管理(Exception Handling Application Block)、数据验证(Validation Application B
阅读全文
摘要:视频链接一、 从主键说起CREATE TABLE BingoT1( id INT IDENTITY(1, 1) , NAME NVARCHAR(10) , --姓??名?? IdentityNo VARCHAR(18) , --身??份??证??号??码?? LogDate DATETIME DEFAULT ( GETDATE() ) , --录??入??日??期?? PRIMARY KEY ( id )--主??键??约??束??)GoINSERT INTO BingoT1( NAME, identityN...
阅读全文
摘要:IFRMAE请求一个跨域时,而这个跨我们没有操作权限,我们只有加一个HTML文件的权限,如何实现自适应行高这需要一个中间页面iframe.html原理:通过改变top.location的hash值,来实现高级的自适应主页面内容:<iframe name="iframeid" id="iframeid" scrolling="no" width="1000" frameborder="0" onload="iframeHeight()"></iframe>
阅读全文
摘要:// 页面引用jsfunction correctPNG() { var arVersion = navigator.appVersion.split("MSIE") var version = parseFloat(arVersion[1]) if ((version >= 5.5) && (document.body.filters)) { for(var j=0; j<document.images.length; j++) { var img = document.images[j] v...
阅读全文
摘要:Javascript中会经常用到setTimeout来推迟一个函数的执行,如:setTimeout(function(){alert("Hello World");},1000);会在执行到这句话后延迟1秒钟来弹出alert窗口。那么再看这一段:function a(){ setTimeout(function() {alert(1)}, 0); alert(2); } a();注意这段代码中的setTimeout延迟设为了0,就是延迟0毫秒,貌似是不做任何延迟立刻执行,即1,2。但实际的执行结果确是2,1。为什么?这得从Javascript调用堆栈(call stack)
阅读全文
摘要:很老的东西,记下来下,万一以后要用到一般来说,我们判断 iframe 是否加载完成其实与 判断 JavaScript 文件是否加载完成 采用的方法很类似: 1 var iframe = document.createElement("iframe"); 2 iframe.src = "http://www.planabc.net"; 3 if (!/*@cc_on!@*/0) { //if not IE 4 iframe.onload = function(){ 5 alert("Local iframe is now loaded....
阅读全文
摘要:在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。
阅读全文
摘要:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-
阅读全文