10 Jinnan

尚未进行身份认证

蒋金楠,网名Artech,《WCF技术剖析》作者,微软解决方案架构(Solutions Architecture)与互联系统(Connected System)双料MVP(最有价值专家)。

等级
TA的排名 2k+

关于CLR内存管理一些深层次的讨论[上篇]

<br/> <br/>半年之前,PM让我在部门内部进行一次关于“内存泄露”的专题分享,我为此准备了一份PPT。今天无意中将其翻出来,觉得里面提到的关于CLR下关于内存管理部分的内存还有点意思。为此,今天按照PPT的内容写了一篇文章。本篇文章不会在讨论那些我们熟悉的话题,比如“值类型引用类型具有怎样的区别?”、“垃圾回收分为几个步骤?”、“Finalizer和Dispose有何不同”、等等,而是讨论一些不同的内容。整篇文章分上下两篇,上篇主要谈论的是“程序集(Assembly)和应用程序域(AppDoma

2010-10-18 22:15:00

[转]T4 Code Generation

<br/>[原文:http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx]Robbeatmetoit.BloggingaboutT4(theTextTemplateTransformationToolkit)hadbeenonmylistliterallyforayear.HeandIwere

2010-10-17 17:15:00

采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[扩展篇]

<br/>关于“验证框架”,先后推出了《编程篇》、《设计篇》和《改进篇》,本不打算再写《XXX篇》的。但是今天收到两个园友的短消息,想了解一下如何定义自己的验证规则。这实际上涉及到对该“验证框架”的扩展,即如何自定义Validator和对应的ValidatorAttribute与ValidatorElementAttribute。为了让本系列看起来完整,通过《扩展篇》进行收尾。本篇我们写一个简单的Validator,用于验证字符串类型属性成员的长度是否符合要求(实际上我是直接借鉴了EnterLib中VAB

2010-10-15 20:15:00

采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[改进篇]

<br/>自《编程篇》和《设计篇》发布以来,收到了一些反馈。尤其是园友双鱼座提到.NET3.5下的System.ComponentModel.DataAnnotations命名空间具有相似的实现,并且通过“表达式”的方式实现了CompositeValidator的服务逻辑判断的功能。为此,我对这个“验证框架”进行了相应的改进,让CompositeValidator具有了解析“验证表达式”的能力。为了让大家对此改进又一个深刻的认识,我们来对比之下对于同一个验证规则,改进前后有何不同。[源代码从这里下载]<

2010-10-14 20:13:00

采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[设计篇]

<br/>没有想到自己头脑发热写了一个简陋版本的所谓“验证框架”能够得到众多网友的推荐。个人觉得这个验证框架有两个主要的特点是:提供CompositeValidator使复杂逻辑判断成为可能;提供多验证规则的支持。《编程篇》中,我主要介绍了如何通过自定义特性的方式进行验证规则的定义,在本篇中我主要来介绍该验证框架的设计原理和实现。一、核心三人组:Validator、ValidatorAttribute和ValidationError<br/>应该说整个验证框架的核心体系只包含如下三中类型:Validat

2010-10-13 21:11:00

采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[编程篇]

<br/>昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性(CustomAttribute)的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。本篇文章分上下两篇,上篇介绍如果来使用这个验证框架,《下篇》介绍背后的设计原理和具体实现。一、定义最简单的验证规则<br/>我们先看看一个最简单的验证规则如何应用到对应的实体类型上。在这里我们模拟一个有趣的场景:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都

2010-10-12 16:12:00

采用一个自创的&quot;验证框架&quot;实现对数据实体的验证[上篇]

<br/>昨天晚上突发奇想,弄了一个简易版的验证框架,用于进行数据实体的验证。目前仅仅实现基于属性的声明式的验证,即通过自定义特性(CustomAttribute)的方式将相应的Validator应用到对应的属性上,并设置相应的验证规则。本篇文章分上下两篇,上篇介绍如果来使用这个验证框架,下面介绍背后的设计原理和具体实现。一、定义最简单的验证规则<br/>我们先看看一个最简单的验证规则如何应用到对应的实体类型上。在这里我们模拟一个有趣的场景:找对象,不论是找男朋友还是女朋友,还是不男不女的朋友,都具有

2010-10-12 16:11:00

当InternalsVisibleToAttribute特性遭遇&quot;强签名&quot;

一、如何让Intenal成员暴露给另一个程序集<br/>我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集。比较典型的应用场景包括如下两种:将一个组件或者模块定义成两个或者两个以上程序集,一个程序集需要访问另一个程序集的Internal成员。比如将一个Logging组件定义成三个程序集:Logging.dll、Logging.Client.dll和Logging.Server.dll。其中后两个分别用于客户端和服务端的日志记录,

2010-10-06 17:08:00

如何解决EnterLib异常处理框架最大的局限&mdash;&mdash;基于异常&quot;类型&quot;的异常处理策略

<br/>个人觉得EnterLib的EHAB(ExceptionHandlingApplicationBlock)是一个不错的异常处理框架,借助于EHAB,我们可以配置的方式来自定义异常处理策略,从而带来最大的灵活性和可维护性。但是,在我看来,EHAB有一个最大的局限,把就是异常处理策略的粒度过大——只能提供基于异常类型级别。本篇文章通过一个自定义ExceptionHandler很好地解决了这个问题。一、EnterLib基于异常类型的异常处理策略<br/>EnterLib的异常处理策略基本上可以通

2010-09-25 16:07:00

EnterLib PIAB又一个BUG?[续]&mdash;&mdash;这是一个致命的BUG

<br/>在《EnterLibPIAB又一个BUG?》这篇文章中我们谈到:当我们通过应用DependencyAttribute特性定义需要自动注入的属性的时候,当这个属性为接口、抽象类或者没有定义无参的构造函数,无论我们调用PolicyInjection的Create方法去创建一个新的对象,还是调用Wrap方法对现有对象进行封装,都会抛出一个ResolutionFailedException异常。之后根据园友韦恩卑鄙的评论,又进行了后续的验证。如果说在前文中,我们还对这是否是个BUG抱着“谨慎”的态度,

2010-09-22 13:07:00

EnterLib PIAB又一个BUG?

<br/>在《这是EnterLibPIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入(ConstructorInjection),而不能支持属性注入(PropertyInjection)和方法注入(MethodInjection)。这是由于EnterLib的PIAB设计本身就存在缺陷。<br/>对EnterLib5.0有一定了解的人都应该知道,在新版本的Ent

2010-09-20 22:18:00

EnterLib PIAB又一个BUG?

<br/>在《这是EnterLibPIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入(ConstructorInjection),而不能支持属性注入(PropertyInjection)和方法注入(MethodInjection)。这是由于EnterLib的PIAB设计本身就存在缺陷。<br/>对EnterLib5.0有一定了解的人都应该知道,在新版本的Ent

2010-09-20 22:17:00

EnterLib PIAB又一个BUG?

<br/>在《这是EnterLibPIAB的BUG吗?》一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题。问题的起因源于《IoC+AOP的简单实现》这篇文章,因为文中给出的解决方案仅仅支持构造器注入(ConstructorInjection),而不能支持属性注入(PropertyInjection)和方法注入(MethodInjection)。这是由于EnterLib的PIAB设计本身就存在缺陷。<br/>对EnterLib5.0有一定了解的人都应该知道,在新版本的Ent

2010-09-20 22:07:00

从数据到代码——通过代码生成机制实现强类型编程[下篇]

<br/>在《上篇》中,我们实现了将保存有消息条目的XML向CodeDOM的转换,即是将XML文件生成一个CodeCompileUnit对象,而该CodeCompileUnit对象反映出来的DOM层次和我们将会生成的代码文件向匹配。在下篇中,我们将实现整个代码生成系统的第二个步骤——通过VS的CustomTool实现数据(保存消息条目的XML)向代码文件的自动转换。一、让MessageCodeGenerator继承BaseCodeGeneratorWithSite<br/>在《上篇》我们创建了Mess

2010-09-18 02:06:00

关于WCF的一个非常“无语”的BUG!

<br/>这确实是一个让人觉得“无语”的BUG,甚至让我觉得微软在故意和我们开玩笑。这个问题在我刚刚接触WCF的时候就遇到过,换言之,这个问题一直存在于.NET3.0、3.5和现在的4.0。这是一个关于在你对WCF进行扩展的时候会经常碰到的问题,读者朋友们可以根据下面的步骤来再现这一个问题。<br/>创建自定义行为(服务行为、终结点行为、契约行为和操作行为)是对WCF进行扩展最为常用的形式。通过下面的代码,我们创建了一个自定义的服务行为,为了简单我们没有编写任何逻辑代码。1:namespace

2010-09-16 20:06:00

创建基于CodeDOM的代码生成器实现&ldquo;强类型&rdquo;编程[上篇]

<br/>我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过VisualStudio,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:在创建强类型DataSet的时候,VS会自动根据Schema生成相应的C#或者VB.NET代码;当我们编辑Resource文件的时候,相应的的后台代码也会自动生成;当我们通过添加WebReference调用WebService或者WCFService的时候,VS会自动生成服务代理的代码和相应的配置。总的来说

2010-09-16 00:06:00

从数据到代码——通过代码生成机制实现强类型编程[上篇]

<br/>我不知道大家对CodeDOM的代码生成机制是否熟悉,但是有一点可以确定:如果你使用过VisualStudio,你就应该体验过它带给我们在编程上的便利。随便列举三种典型的代码生成的场景:在创建强类型DataSet的时候,VS会自动根据Schema生成相应的C#或者VB.NET代码;当我们编辑Resource文件的时候,相应的的后台代码也会自动生成;当我们通过添加WebReference调用WebService或者WCFService的时候,VS会自动生成服务代理的代码和相应的配置。总的来说

2010-09-16 00:06:00

这是EnterLib PIAB的BUG吗?

<br/>在默认的情况下,EnterLib的PIAB采用基于TransparentProxy/RealProxy的机制实现对方法调用的拦截,进而实现了对横切关注点(CrosscuttingConcern)的动态注入。也正是其来截机制本身的局限,当我们才用PIAB的方式进行对象的创建的时候,要求本创建对象的类型要么实现某一个接口,要么继承MarshalByRefObject类型。但是当我们让抽象基类继承自MarshalByRefObject就不行了,我个人觉得这是微软需要改进的地方。一、基于接口实现和对M

2010-09-15 12:06:00

人生观、世界观?!

<br/>这是一个大得能把牛吓死的话题。上周公司为我们进行企业核心价值(CoreValue)的培训,让我们每人写出3条个人价值观。对于这个问题,我之前还真没有人证思考过——到底我的人生信条是什么呢?想了半天,写出了以下三条:一、正直<br/>我经常说一句话:“当今中国是一个无法无天的社会”。<br/>天,上天,神也。中国没有宗教,中国人不敬鬼神,俨然一个“大无畏”的民族。但是,一旦没有了敬畏,人就会变得没有了底线,这是一件很可怕的事情。<br/>法,法理,制度也。中国虽然号称“法制社会”,但是很多

2010-09-13 19:06:00

我美丽的家乡——洪雅[转]

<br/>洪雅于隋开皇十三年(公元593年)建县,距今已有1400多年历史,地处四川盆地西南边缘,东接夹江县、峨眉山市,南抵汉源县、金口河区,西邻雅安雨城区、荥经县,北连名山县、丹棱县,距成都116公里、乐山55公里、眉山50公里、雅安62公里。全县幅员面积1896.49平方公里,辖15乡镇142村1048社14社区,总人口34.67万。属中亚热带湿润气候,年降雨量1435.5毫米,年日照1006.1小时,年无霜期312天,年平均气温16.6℃。地形由西南向东北呈高低梯次变化,素有“七山二水一分田”之称。

2010-09-12 14:06:00

查看更多

勋章 我的勋章
  • 微软mvp
    微软mvp
    授予通过CSDN博客平台积极分享微软相关技术知识和专业技能,并做出突出贡献的用户。