MVC模式下unity配置,即DI(依賴註入)& IOC(控制反轉)> 報錯“No connection string named '**Context' could be found in the application config file”

来源:http://www.cnblogs.com/luosiqizi/archive/2017/10/12/7655971.html
-Advertisement-
Play Games

寫在前面: 第一次配置時好好的,後來第二次改到MVC模式,把依賴註入寫成字典的單例模式時,由於新建的ORM(資料庫映射模型EF),怎麼弄都不用,一直報錯"No connection string named '**Context' could be found in the application ...


   寫在前面: 第一次配置時好好的,後來第二次改到MVC模式,把依賴註入寫成字典的單例模式時,由於新建的ORM(資料庫映射模型EF),怎麼弄都不用,一直報錯"No connection string named '**Context' could be found in the application config file"(配置文件中找不到資料庫context連接)調試了兩小天問題,終於想到了是沒有把EF模型中appconfig中的資料庫連接複製到項目webconfig中導致的!!!改過之後果然好了,豁然開朗!

  中間也發現了一個小的點:調試的時候因為配置有問題,就改成不用配置直接寫的方式:(如下)

            UnityContainer container = new UnityContainer();
             container.RegisterType<DbContext, JDContext>();
            container.RegisterType<IBaseService, BaseService>();
            container.RegisterType<IUserMenuService, UserMenuService>();

            IBaseService baseService = container.Resolve<IBaseService>();
            IUserMenuService userservice = container.Resolve<IUserMenuService>();
            JD_User a = userservice.Set<JD_User>().FirstOrDefault();        

然後就報錯BaseService是抽象類 不能實例化。 後來發現 這句不需要寫出來
IBaseService baseService = container.Resolve<IBaseService>();

因為 IUserMenuService 繼承了 IBaseService    實現IUserMenuService的時候自然就把基類帶出來了實現了。  

困惑了一天半 終於解決了。

以下是DI工廠實現

namespace Common
{
    public class DIFactory
    {
        private static object _syncHelper = new object();
        private static Dictionary<string, IUnityContainer> _UnityContainerDic = new Dictionary<string, IUnityContainer>();

        public static IUnityContainer GetContainer(string containerName = "JDContainer")
        {
            if (!_UnityContainerDic.ContainsKey(containerName))
            {
                lock (_syncHelper)
                {
                    if (!_UnityContainerDic.ContainsKey(containerName))
                    {
                        IUnityContainer container = new UnityContainer();
                        ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
                        fileMap.ExeConfigFilename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "CfgFiles\\Unity.Config.xml");
                        Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
                        UnityConfigurationSection section = (UnityConfigurationSection)configuration.GetSection(UnityConfigurationSection.SectionName);
                        section.Configure(container, containerName);

                        _UnityContainerDic.Add(containerName, container);
                    }
                }
            }
            return _UnityContainerDic[containerName];
        }
    }
}

以下是unity文件配置  (即上文代碼中的 Unity.Config.xml )

<configuration>
  <configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration"/>
  </configSections>
  <unity>
    <sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration"/>
    <containers>
      <container name="JDContainer">
        <!--<register type="Interface.ITest, Interface" mapTo="Service.Test, Service" />-->
        <register type="System.Data.Entity.DbContext, EntityFramework" mapTo="EF.Model.JDContext, EF.Model"/>
        <register type="Interface.IBaseService, Interface" mapTo="Service.BaseService, Service" />
        <register type="Interface.IUserMenuService, Interface" mapTo="Service.UserMenuService, Service" />
      </container>
      <!--<container name="testContainer">
        <register type="Interface.ITest, Interface" mapTo="Service.Test, Service" />
        <register type="System.Data.Entity.DbContext, EntityFramework" mapTo="EF.yuncaidbEntities, EF"/>
        <register type="Interface.IBaseService, Interface" mapTo="Service.BaseService, Service" />
        <register type="Interface.IUserService, Interface" mapTo="Service.UserService, Service" />
      </container>-->
    </containers>
  </unity>
</configuration>

 



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

-Advertisement-
Play Games
更多相關文章
  • 考慮用靜態工廠方法替代構造器 考慮使用靜態工廠方法來替代構造器的原因: 考慮下麵的程式: 該代碼的含義是返回一個很有可能是質數並且長度為3的BigInteger對像,這裡的長度只的是將整數裝換成二進位後的長度;很有可能指的是:不是質數的概率不超過2-100。 但是如果使用的是構造函數:BigInte ...
  • 今天在一段程式中看到這樣一個很奇怪的語句: 博主查了之後發現業界稱其萬能頭文件,這個頭文件包含瞭如下等頭文件,幾乎包含了所有的C++標準庫頭文件,使用後代碼中省去了相當多的頭文件的書寫 但也有以下兩個缺點: 1、因其包含的頭文件的過多,導致程式編譯慢 2、其不屬於標準庫裡面的頭文件,只是gcc的內部 ...
  • 閑來沒事,想整理下一些知識。 這篇文章是關於spring的web程式的搭建,有什麼不對的地方希望大家批評指正。 首先我們要瞭解什麼是spring,這裡可能很多大家也都明白,無非是一個管理對象的一個容器,主要體現在IOC註入和AOP切麵編程。 關於上面的兩點在後面一點會給大家更具體的說明一下是什麼。 ...
  • 視頻直播是指利用互聯網及流媒體技術進行直播,視頻因融合了圖像、文字、聲音等豐富元素,聲形並茂,效果極佳,逐漸成為互聯網的主流表達方式。初期相關參考:HTTP 長連接和短連接灰度發佈A/B測試今天先到這兒,希望對您在系統架構設計與評估,團隊管理, 項目管理, 產品管理,團隊建設 有參考作用 , 您可能... ...
  • 十一宅了,也沒學習看啥書,所有時間花在了圍棋上,雖然很頹廢,不過令人欣慰的是居然升了3級,現在是6k水平,之前晚上下的多,停在9k挺長時間的,居然在10.1突破了,這麼看來我能升段的目標還是可能實現的,這麼看自信還真是挺重要的,而我一直不算個自信的人,本來打算10.1假期完成這個設計模式總結的,但是 ...
  • 是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織, 在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。M是指業務模型,V是指用戶界面,C則是控制器,使用MVC的目的是將M和V的實現代碼分離, 從 ...
  • A代碼編輯器,線上模版編輯,仿開發工具編輯器,pdf線上預覽,文件轉換編碼B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿 ...
  • 本文會對可能用到的相關技術進行技術選型的說明,以及技術的架構介紹 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...