ASP.NET MVC+WCF+NHibernate+Autofac 框架组合(一)

读书了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

 

相关文章