在ASP.NET中使用Spring.Net等开源框架笔记

来源:互联网 发布:剑灵捏脸数据百度云 编辑:程序博客网 时间:2024/05/17 08:59

        最近终于有时间研究在.NET中通过框架来实现IOC,AOP,整合ORM,MVC等技术,JavaEE的框架用久了,再回来写.NET还真是不适应,老是写工厂也不是回事。

        暂时也没有时间和机会在实践中运用,先记录一些入门级使用的笔记和遇到的问题,诸如NHibernate,Castle等等会逐渐更新,不过还是希望以后有机会在实战中运用,再专门写一些专题的博客。其实这些框架的使用大同小异,熟悉JavaEE之后仅作为了解参考即可。


Spring.Net

1、这个是对Spring.Net概念性的一个基本介绍,如果没有接触过spring可以先了解一下:http://www.cnblogs.com/beniao/archive/2008/04/22/Springnet.html


2、Spring.Net的基本使用:http://www.cnblogs.com/han1982/p/4177850.html


3、这个是大牛关于Spring.NET以及结合MVC,以及很多结合实战的使用:http://www.cnblogs.com/GoodHelper/tag/Spring.NET/default.html?page=1


4、与JavaEE的Spring类似,IApplicationContext是IObjectFactory的子级接口,我们一般使用的是IApplicationContext,还有其他的xml配置,装载,构造方法的注入,属性注入等等都是大同小异。


5、亲自写了个Spring.Net的小Demo,可能对于Common.Logging.dll, Spring.Core.dll这2个核心的程序集,网上的版本太杂,会有点问题,可以打开VS的NuGet程序包管理器,直接搜索Spring.Core安装即可。



6、另外对于上文中提到<objects>节点的属性xmlns="http://www.springframework.net"是必须的,删去此属性也可以成功注入,我估计可能是由于历史版本的原因,望大家不吝赐教。


7、多说一点,现在.NET MVC已经开始全面支持IOC,用自带的配置简单,也很方便,参考:http://www.cnblogs.com/TomXu/p/4496440.html


NHibernate

        关于NHibernate的学习和实战使用还是参考这个系列:http://www.cnblogs.com/GoodHelper/category/214139.html

还是写了写简单的Demo,下面是遇到的几点问题

         1)首先在添加程序集时,如果是3.2以上的版本,我们只需要Iesi.Collections.dll,NHibernate.dll2个程序集,NHibernate.ByteCode.Castle.dll,NHibernate.ByteCode.LinFu.dll, NHibernate.ByteCode.Spring.dll 这3个程序集不再需要,但是注意proxyfactory.factory_class属性需要把原来的

<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>

改为

<property name="proxyfactory.factory_class">NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property>


          2)如果出现 NHibernate.MappingException: No persister for....异常,考虑如下解决方法

                

a、配置文件后缀名写错 mapping file 必须是.hbm.xml结尾

b、Web.config配置中

<mapping assembly="程序集名"/>

c、hibernate 的mapping 配置文件是xml,属性必须设置成“嵌入的资源”,因为NH搜索配置文件不是在项目目录中寻找,而是在第2点中配置的程序集中查找,所以必须生成于程序集。

d、尝试在代码中手动载入程序集var cfg = new NHibernate.Cfg.Configuration().AddAssembly("NHibernateDemo");


         3)NHibernate与EF的使用非常相似,说的简单点,ISession对象对应于EF上下文对象,NH事务的提交就对应于EF的SaveChanges方法,他们管理对象的方式,对象寄存的方式也几乎是一样,具体参考上面给的链接,系列文章的题为 " NHibernate从入门到精通系列(4)——持久对象的生命周期 " 的2篇文章,不过在第一篇文章中有一处错误:

session.Save(product);
product.SellPrice = 12M;
tran.Commit();

同EF一样,对象被ISession对象所管理时,对对象所做的更改也仅仅作用于容器中的对象,当执行tran.Commit();过后数据才提交到数据库中。

而不是作者所说被ISession对象管理的实体一旦更改,就会同步到数据库。


        4)其实hibernate要学的东西还很多,仅查询方式就支持hql,criteria,类似EF的Linq+扩展方法+lambda,不过具体的详细使用还是去拜读前辈们的文章吧
Hibernate的各种查询方式:http://www.cnblogs.com/ylwn817/articles/1963528.html


5)NHibernate仍然需要像管理EF上下文一样管理Session对象,同样,我们也可以把它"缓存"在HttpContext中,但是已经帮我们完成了类似的工作。详情参见http://www.cnblogs.com/13yan/archive/2013/05/17/3083552.html。作者还给大家提供了一个NHibernateHelper,很赞。

0 0