摘要: 一说到反射,很多人都想到了性能,更有甚者直接说“慎用反射,遗患无穷”,“用反射,感觉怎么像是退步啊~”,看到这种言论,直接把反射妖魔化了,如果这种言论长此以往,势必会对很多对反射初学者造成负面影响。反射是一把双刃剑,看你怎样使用了,下面我就用代码说话。class TestEntity { } 1. 手工创建TestEntity [TestInfo(Category = "Class.Constructor", Name = "Direct")] class DirectInvokeMode:IRunable { public void Run() { n 阅读全文
posted @ 2011-04-18 16:37 风云 阅读(4279) 评论(24) 推荐(8)
摘要: 在大比拼之前先讲一个小插曲,我这个人以前比较低调,做了很多好东西仅仅在公司内的朋友圈项目圈内分享,很少在博客园内进行分享,后来在dudu 老大的文章博客园现代化建设——AutoMapper有感便推荐一下OOMapper 组件,于是乎接连写了几篇入门性的介绍使用文章:开发人员必备工具:OOMapperOO Mapper 实践(上篇)OO Mapper 实践(下篇) 在园友Repository兄的NLiteMapper与EmitMapper性能简单比较中了解到NLiteMapper与EmitMapper的性能巨大差距,于是乎进行了两天的性能优化,同时总结了优化过程:一次性能优化最佳实践。在这里非. 阅读全文
posted @ 2011-04-13 12:49 风云 阅读(12892) 评论(46) 推荐(23)
摘要: 上周五下班前,在Repository兄测试NLiteMapper和EmitMapper的文章中,发现了令我跌破眼镜的性能悬殊对比12283ms : 7ms。真不可思议,与是便把EmitMapper的源代码和OOMapper 的源代码一起下载下来,以Release模式的方式做一个公平对比。测试代码仍然沿用Repository兄的,代码如下:public class SimpleClassFrom { public long ID { get; set; } public string Name { get; set; } public int Age { get; set; } public . 阅读全文
posted @ 2011-04-11 11:28 风云 阅读(4096) 评论(17) 推荐(3)
摘要: 上篇介绍了OO Mapper 最核心的映射,简单类型映射,这篇将介绍的复合类型的映射。 1. Dictionary - > Dictionary 字典类型分为:IDictionary,IDictioanry<TKey,TValue> public class SourceValue { public int Value { get; set; } } public class DestValue { public int Value { get; set; } } [Test] public void Example() { var sourceDict = new Dict 阅读全文
posted @ 2011-04-08 15:53 风云 阅读(3283) 评论(11) 推荐(3)
摘要: 上一篇介绍了OO Mapper的作用以及支持的功能。这一篇将以上一篇为提纲进行实践。 准备工作:下载NLite编译NLite 项目创建一个NUnit单元测试项目添加NLite.dll 引用添加 : using NLite; 实践: 1. Any -> StringAssert.AreEqual("5", Mapper.Map<int, string>(5)); 2. primitive->Enum,Enum->primitive [TestFixture] public class EnumTests { public enum En1 : b 阅读全文
posted @ 2011-04-08 12:50 风云 阅读(4247) 评论(6) 推荐(6)
摘要: 昨天看了dudu 老大的文章博客园现代化建设——AutoMapper有感便推荐一下OOMapper 组件,诚然OOMapper 组件是站在巨人的肩膀上,如AutoMapper,EmitMapper,以及Codeplex上所有类似组件上都做了借鉴,也重新发明了轮子,但是在发明轮子的过程中个人的积累也在提升。 OO Mapper 是NLite组件库中的一个组件,它是一个对象到对象转换的映射工具,常常用于把复杂的对象转化为DTO对象。 OO Mapper 支持以下映射功能: Any -> String Primitive -> Enum Enum -> Primitive Null 阅读全文
posted @ 2011-04-08 11:45 风云 阅读(7091) 评论(20) 推荐(3)
摘要: 在项目中常常会遇到多个组件都实现了同一个契约接口,那么在DI容器中怎么获取实现同一个契约接口的所有组件呢。答案是:IEnumerable<TContract> componets = ServiceLocator.GetAll<TContract>(); 上面的实现方案是目前主流的DI容器的解决方法。但是这种方法是通过服务定位器把资源拉过来的,而不是通过注入的方式推过来的,不符合DI注入传统设计规范。那么怎么能够更优雅的解决此类问题呢,MEF率先提供了一种方案ImportMany的方式来进行注入多个组件,当然MIni容器也不甘落后也很快就赶上了。下面看看Mini容器的例 阅读全文
posted @ 2011-04-07 12:46 风云 阅读(1663) 评论(3) 推荐(3)
摘要: Lazy注入指的是在注入的成员变量或构造函数参数变量或函数参数变量的类型上包裹一个Lazy类型,该注入方式是借鉴了MEF思想。具体代码: [TestFixture] public class LazyInjectionTest:TestBase { [Contract] interface ISimpleContract { } class SimpleComponent : ISimpleContract { } class HostComponent { [Inject] public Lazy<ISimpleContract> contract; } [Test] publi 阅读全文
posted @ 2011-04-07 11:50 风云 阅读(954) 评论(1) 推荐(1)
摘要: Mini容器的插件注入是通过InjectMany的方式来注入多个组件的方式进行的,插件的元数据通过标签的方式进行配置,Mini容器在注入插件的过程中同时也可以把插件的元数据一起注入,这和MEF实现插件框架是一样的。 下面看看Mini容器怎样来实现插件架构的。 1. 定义插件接口契约,插件元数据标签以及插件元数据接口 //插件接口 [Contract] public interface IAddIn { void Start();//启动插件 } //插件配置元数据标签 [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]. 阅读全文
posted @ 2011-04-07 10:42 风云 阅读(1684) 评论(1) 推荐(2)
摘要: 方法注入的条件: 1. 方法必须是实例方法 2. 方法必须有参数 3. 方法上必须贴有标签InjectAttribute 方法注入最佳原则 1. 当需要注入的方法的访问权限是私有时,应该把方法所属的类标记为密封类,具体原因请大家猜一猜。 2. 当类标记为密封类时,该类应该实现一个或多个契约接口(当如果需要对该类进行Aop拦截时,可以进行接口代理)样例代码学习: class Person4 : IPerson { public string Name { get; set; } public IHorse Horse { get; private set; } public bool HasVi 阅读全文
posted @ 2010-07-06 17:44 风云 阅读(775) 评论(1) 推荐(1)