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

来源:http://www.cnblogs.com/lm-nice/archive/2016/08/27/5812137.html
-Advertisement-
Play Games

學習了Spring.NET+NHibernate的框架,覺得Spring.NET框架不夠輕量,配置來配置去的比較頭疼,所以把Spring.NET換成了Autofac框架,同時加入WCF框架整了一個組合。 本來想把NHibernate換成EF的,因為現在普通用的.net 4.0,但是.net 4.0里 ...


學習了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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 點擊“組織”,再選擇“文件夾和搜索選項”命令。 2. 接下來在打開的“文件夾選項”對話框中,單擊“查看”,切換到“查看”選項卡中。 3. 然後在下麵的“高級設置”區域,取消“隱藏受保護的操作系統文件”前面的覆選框;再選擇下麵的“顯示隱藏的文件、文件夾和驅動器”單選項。 4. 最後單擊“確定”按 ...
  • 一、線程屬性 可以使用pthread_attr_t結構修改線程預設屬性,並這些屬性和創建的線程練習起來,可以使用pthread_att_init函數初始化pthread_attr_t結構,調用pthread_attr_init後,pthread_attr_t結構所包含的就是操作系統實現支持的所有線程 ...
  • ELF:可執行二進位文件的存儲格式 可執行的,可鏈接的文件 文件系統: rootfs :根文件系統 ls / /boot:系統啟動相關的文件,如內核、initrd、以及grub(引導載入器bootloader) vmlinux-2.6.18-308.el5 initrd-2.6.18-308.el5 ...
  • 1.前言 在學習Socket之前,先來學習點網路相關的知識吧,自己學習過程中的一些總結,Socket是一門很高深的學問,本文只是Socket一些最基礎的東西,大神請自覺繞路。 傳輸協議 TCP:Transmission Control Protocol 傳輸控制協議TCP是一種面向連接(連接導向)的 ...
  • 1.什麼是SQL語句 sql語言:結構化的查詢語言。(Structured Query Language),是關係資料庫管理系統的標準語言。 它是一種解釋語言:寫一句執行一句,不需要整體編譯執行。語法特點:1.沒有“ ”,字元串使用‘ ’包含2.沒有邏輯相等,賦值和邏輯相等都是=3.類型不再是最嚴格 ...
  • 這裡主要看一下Hello World代碼 ...
  • 阿裡巴巴-矢量圖標庫 此網站 1、能搜到官方和個人提供的優秀圖標 再也不用擔心不會用photoshop~再也不用擔心沒圖標,做不出界面了~ 2、能生成複雜的字體 IP地址:http://iconfont.cn/ 網站界面: 轉自:http://Www.CnBlogs.Com/WebEnh/ 感謝We ...
  • 依賴屬性,簡單的說,在WPF控制項應用過程中,界面上直接可以引用的屬性 如:<Button Content="aaa"></Button> Content稱為Button的依賴屬性 當我們自定義控制項時,如何添加依賴屬性呢 1、添加屬性 2、註冊屬性 然後在應用自定義控制項時,就能直接設置屬性了,例如: ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...