学习了Spring.NET+NHibernate的框架,觉得Spring.NET框架不够轻量,配置来配置去的比较头疼,所以把Spring.NET换成了Autofac框架,同时加入WCF框架整了一个组合。

本来想把NHibernate换成EF的,因为现在普通用的.net 4.0,但是.net 4.0里的EF对Oracle支持没那么好,.net4.5有了oracle新的驱动就挺好用了。

一点点心得,NHibernate也是刚熟悉,给像我一样的新手参考,一起学习,有什么不够合理的地方还请多多指教。

数据库为 Oracle11G, NHibernate版本 3.2,.net 4.0

源码中

clientApp +Manager+Repository+Model 是前面Spring.NET+NHibernate写的。

Model:实体

Repository:持久层,抽象数据库操作,其中

IRepository是增删改的接口类,

NHibernateRepository是使用是NHibernate的数据库操作模板,模板类封装了对数据库的操作(Spring.NET的这套用的此类)。

RepositotyBase是没使用模板,利用NHibernate的核心类对数据库进行操作。与NHibernateRepository性质一样(Autofac的那套用的此类)。

Manager:业务层,Repository的具体业务类。

clientApp:控制台客户端

后面Spring.NET换成了Autofac后这一套程序可能编译不通过了。

AutofacMvc+Service+BLL+Repository+Model是 MVC+WCF+Autofac+NHibernate写的一套框架。

Repository,Model与上面是共用的

BLL:业务层

Service:服务层,WCF服务应用程序

下面逐一讲解:

Model:

  每个实体都对应一个.hbm.xml配置文件,NHibernate根据此文件信息与数据库进行映射,NHibernate不同版本配置会有区别。

  配置文件 的生成操作改成“嵌入的资源”

Repository:

  Repository.xml 如果是用Spring.Net+NHibernate,那么个文件是必须的,里面配置NHibernate相关属性,及以Spring.NET注入的相关属性。

  RepositotyBase是本套框架调用的数据库操作类,该类构造函数的参数是三个NHibernate的核心类,用来用Autofac进行实例化。

BLL:

  UserBLL:构造函数参数为IRepository,也是为了用Autofac注入的。

Service:

hibernate.cfg.xml 是NHibernate的数据库配置 ,文件名是固定的。数据库是oracle11g(该配置也可写在web.config文件里。我是用的web.config里的配置).

packages.config 是Autofac的配置文件

Global.asax里的代码如下,

   public static IContainer container = null;

protected void Application_Start(object sender, EventArgs e)
        {
            Configuration config = new Configuration();

    //如果是用hibernate.cfg.xml的配置,则该行代码为 Configuration config = new Configuration().Configure();
            config.AddAssembly("Model");//加载实体程序集。
            ISessionFactory sessionFactory = config.BuildSessionFactory();
            ISession session= sessionFactory.OpenSession();
            ContainerBuilder builder = new ContainerBuilder();
    //以上是构造出NHibernate的核心类实例
            builder.RegisterInstance(config).As<Configuration>().SingleInstance();
            builder.RegisterInstance(sessionFactory).As<ISessionFactory>().SingleInstance();
            builder.Register(x => x.Resolve<ISessionFactory>().OpenSession()).As<ISession>().InstancePerLifetimeScope();
    //将NHibernate的核心类实例注入到容器

builder.Register(c => new RepositotyBase<User>(c.Resolve<Configuration>(), c.Resolve<ISession>(), c.Resolve<ISessionFactory>())).As<IRepository<User>>();
            builder.Register(c => new UserBLL(c.Resolve<IRepository<User>>())).InstancePerDependency();
            container = builder.Build();
            //将业务层及数据层的操作类注入到容器
            var csl = new AutofacServiceLocator(container);
            ServiceLocator.SetLocatorProvider(() => csl);
        }

protected void Application_End(object sender, EventArgs e)
        {
            if (container != null)
            {
                container.Dispose();
                container = null;
            }
        }//程序退出释放资源

UserManager.svc:

服务类里:UserBLL userBll = ServiceLocator.Current.GetInstance<UserBLL>();获得业务层类的实例进行业务操作。

至此服务端的代码完成。只测试了User业务。客户端的MVC里后面再写上。编译时如果发生未找到Oracle.DataAccess.dll,NHibernate错误,将dll文件放入bin文件。

源代码:http://files.cnblogs.com/files/lm-nice/SpringNet_NHibernate.7z

ASP.NET MVC+WCF+NHibernate+Autofac 框架组合(一)的更多相关文章

  1. ASP.NET MVC IOC 之AutoFac

    ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...

  2. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  3. Ioc容器Autofac系列(2)-- asp.net mvc中整合autofac

    经过上篇蜻蜓点水的介绍后,本篇通过实例快速上手autofac,展示当asp.net mvc引入了autofac之后会带来什么. 创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点 ...

  4. Asp.net mvc中整合autofac

    创建Asp.net MVC并引入Autofac 首先,创建一个MVC站点,为方便起见,选初始带HomeController和AccountController的那种.然后通过NuGet或到Autofa ...

  5. Asp.net MVC 插件式应用框架

    Asp.net MVC 插件式应用框架 2013年05月13日 10:16供稿中心: 互联网运营部 摘要:这几年来做了很多个网站系统,一直坚持使用asp.net mvc建站,每次都从头开始做Layou ...

  6. [转]ASP.NET MVC IOC 之AutoFac攻略

    本文转自:http://www.cnblogs.com/WeiGe/p/3871451.html 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用A ...

  7. ASP.NET MVC IOC 之AutoFac攻略

    一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~ Autofa ...

  8. .NET手记-为ASP.NET MVC程序集成Autofac

    MVC Autofac总是会紧跟最新版本的ASP.NET MVC框架,所以文档也会一直保持更新.一般来讲,不同版本的框架集成Autofac的方法一般不变. MVC集成需要引用 Autofac.Mvc5 ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...

随机推荐

  1. Force.com微信开发系列(四)申请Access Token及自定义菜单之创建菜单

    在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒内失效,重复获取将导致上次获取的Token失效,本文将首先介 ...

  2. [linux]CentOS无法使用epel源

    [linux]CentOS无法使用epel源 问题的产生与解决 作者作为Android应用开发者,对linux的接触一直是ubuntu为主,但是有一个用于科学上网的vps,由于内存只有64M,所以使用 ...

  3. IOS Quartz2D 通过UIColor生成图片

    普通生成 示例代码: //这里实现普通生成图片的方法 - (void)drawRect:(CGRect)rect { CGRect cxRect = CGRectMake(, , , ); UIGra ...

  4. 【原】训练自己haar-like特征分类器并识别物体(1)

    本系列文章旨在学习如何在opencv中基于haar-like特征训练自己的分类器,并且用该分类器用于模式识别.该过程大致可以分为一下几个大步骤: 1.准备训练样本图片,包括正例及反例样本 2.生成样本 ...

  5. NSString的八条实用技巧

    NSString的八条实用技巧 有一篇文章写了:iOS开发之NSString的几条实用技巧 , 今天这篇,我们讲讲NSString的八条实用技巧.大家可以收藏起来,方便开发随时可以复制粘贴. 0.首字 ...

  6. Swift语言与Objective-C语言混合编程

    首先创建一个Swift的Single View工程 然后直接在工程中新建OC文件: 然后选择OC语言之后会问你是否自动创建OC和Swift的中间文件: 然后工程文件夹里就有了三个文件: 现在OC头文件 ...

  7. 最新Burpsuite Pro v1.7.03 介绍和破解版下载

    0x00 介绍 Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程.所有的工具都共享一个能处理并显示HTTP 消息, ...

  8. 【OpenCV】图像转成YUV420 I420格式

    一.YUV420 I420介绍 一种颜色编码方法,在YUV色彩空间中,Y表示亮度信号,U.V表示色度信号: 其YUV排列如下,4个Y分量(2x2)对应一个U和V, Y存放完,接着存放U,U存放完,最后 ...

  9. [VMware]设置VM虚拟机随系统自动启动

    设置步骤: 1.找到VM的安装路径,右键vmware发送到桌面快捷方式 2.右键桌面快捷方式的属性,看到目标的属性框 3.找到需要自启动的虚拟机路径,如: D:\QC_VM\Clone of Wind ...

  10. 《只是为了好玩:Linux之父林纳斯自传》

    <只是为了好玩:Linux之父林纳斯自传> 基本信息 作者: (美)Linus Torvalds    David Diamond 译者: 陈少芸 出版社:人民邮电出版社 ISBN:978 ...