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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...