时隔一年多以后Castle 项目又开始活跃,最近刚发布了Castle Core 4.0.0 的alpha版本,主要包括的内容是DynamicProxy 和 DictionaryAdapter,日志集成工作正在开发中,这个版本主要针对的是.NET Core版本的更新。
Castle.DynamicProxy可以实现动态代理的功能,这个也是很多框架的基础。也就是说它是众多开源项目向.NET Core兼容的重要基础组件。在IBatis.Net中就是使用了Castle.DynamicProxy来实现数据库连接等动态操作的。同时在NHibernet等其他框架中也使用到了这个技术。特点是实体不需要继承MarshalByRef、ContextBoundObject便可以实现代理类。基于透明代理的功能,可以实现对方法调用的拦截处理,例如NHibernate用它实现延迟加载DP的使用非常简单,内部没有使用反射,而是采用Emit、委托等方式生成代理类型,调用真实类的方法,性能方面也没有太多损失。而且更重要的是将在.NET Core中被废止的技术 已经提到反射在.NET Core中已经产生了很大的变化,相信以后Castle.DynamicProxy会有更大的用处。基本使用可参照 AOP之Castle DynamicProxy 动态代理。
Castle DictionaryAdapter 也是一个很有用的工具,动态生成 IDictionary (包括泛型) 类型的强类型包装。不只如此,但它也有一些其他功能,如支持 INotifyPropertyChanged,可编辑性、 错误处理等...,
有很多非类型化的字典中使用,例如Session, Form, QueryString, Context.Items和 MonoRail‘s PropertyBag ,也可以用来包装 app.settings/web.settings。推荐看下这两篇文章,DictionaryAdapter is Love (Part 1)、 DictionaryAdapter is Love (Part 2)。