<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET Core源碼解析配置文件及依賴注入

        來源:懂視網 責編:小采 時間:2020-11-27 22:34:27
        文檔

        .NET Core源碼解析配置文件及依賴注入

        .NET Core源碼解析配置文件及依賴注入:寫在前面 上篇文章我給大家講解了ASP.NET Core的概念及為什么使用它,接著帶著你一步一步的配置了.NET Core的開發環境并創建了一個ASP.NET Core的mvc項目,同時又通過一個實戰教你如何在頁面顯示一個Content的列表。不知道你有沒有跟著敲下代碼,千萬不要做眼
        推薦度:
        導讀.NET Core源碼解析配置文件及依賴注入:寫在前面 上篇文章我給大家講解了ASP.NET Core的概念及為什么使用它,接著帶著你一步一步的配置了.NET Core的開發環境并創建了一個ASP.NET Core的mvc項目,同時又通過一個實戰教你如何在頁面顯示一個Content的列表。不知道你有沒有跟著敲下代碼,千萬不要做眼

        這段代碼也就是從appsettings.json這個配置文件中的Content這個節點匹配到Content這個對象上。

        6.修改下ContentController這個控制器代碼如下:

        private readonly Content contents;
         public ContentController(IOptions<Content> option)
         {
         contents = option.Value;
         }
         /// <summary>
         /// 首頁顯示
         /// </summary>
         /// <returns></returns>
         public IActionResult Index()
         {
        
         return View(new ContentViewModel { Contents=new List<Content> { contents} });
         }

        7.按下F5運行下,然后導航到Content目錄看到如下頁面:說明成功從appsettings.json這個文件中加載了內容。這一切是怎么發生的呢?下面我們就一步一步的來分析。

        8.我們回過頭來看我們的Main方法,發現里面有一個CreateDefaultBuilder方法,就是這個方法里面為我們做了一些默認的設置,然后加載我們的配置文件的!

        9.我們在源碼里面找到CreateDefaultBuilder 的源碼(反正我找了半天,起初在Hosting下面找,實際上在MetaPackages下面的),位置在src\MetaPackages\src\Microsoft.AspNetCore\WebHost.cs 有的人可能找不到哦,可以看到這個方法會在ConfigureAppConfiguration 的時候默認加載appsetting文件,并做一些初始的設置,所以我們不需要任何操作,就能加載appsettings 的內容了。

        10.既然知道了原理后,我們就試著重寫下這個ConfigureAppConfiguration 然后加載我們自定義的json文件吧。

        11.鼠標右鍵新建一個Content.json文件,然后輸入如下的內容:

        {
         "ContentList": 
         {
         "Id": 1,
         "title": "title1 from diy json",
         "content": "content1 from diy json",
         "status": 1,
         "add_time": "2018-11-21 16:29",
         "modify_time": null
         }
        
        }

        12.然后打開Program.cs。按如下代碼進行改造:

        /// <summary>
         /// Main方法,程序的入口方法
         /// </summary>
         /// <param name="args"></param>
         public static void Main(string[] args)
         {
         CreateWebHostBuilder(args)//調用下面的方法,返回一個WebHostBuilder對象
         .Build()//用上面返回的WebHostBuilder對象創建一個WebHost
         .Run();//運行上面創建的WebHost對象從而運行我們的Web應用程序換句話說就是啟動一個一直運行監聽http請求的任務
         }
        
         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
         WebHost.CreateDefaultBuilder(args)//使用默認的配置信息來初始化一個新的IWebHostBuilder實例
         .ConfigureAppConfiguration((hostingContext, config) =>
         {
         var env = hostingContext.HostingEnvironment;
        
         config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
         .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
         .AddJsonFile("Content.json",optional:false,reloadOnChange:false)
         .AddEnvironmentVariables();
        
         })
         .UseStartup<Startup>();// 為Web Host指定了Startup類

        13.然后Startup里面ConfigureServices中的代碼修改如下:

        14.然后按下F5運行下代碼吧,如下圖所示,從我們最新添加的json文件中加載出來數據了。

        15.這里多講一點,傳統asp.net的web.config文件如果有更改的話是必須要重啟站點才能使,配置文件生效的,但是asp.net core的配置文件是支持熱更新的,及不重啟網站也能加載更新,只需要設置一下屬性即可,如下圖所示:

        16.配置文件的源碼解讀這塊就到這里了。下面開始依賴注入的講解。

        依賴注入與控制反轉

        如果大家仔細閱讀文章的話,相信已經看出來了,我上面提到過好幾次依賴注入的概念。那么究竟什么是依賴注入呢?下面我們就拿我們上面的ContentController來好好的來理解下。

        依賴注入:當一個對象ContentController需要另一個對象Content來協同完成任務的時候,那么這個ContentController就對這個Content對象產生了依賴關系。那么在這個ContentController中,是怎么注入的呢?就是從控制器中注入的了,如下圖所示:

        從asp.net 轉過來的你是不是想起了之前的千篇一律的new對象啊。沒對象自己new(要是女朋友也能new多好啊……)當然除了單例對象,靜態哈。

        這里又設計一個概念就是控制反轉。

        那么什么是控制反轉呢?你上面看到沒有,你自己new對象就是正轉,因為你自己創建自己所要使用的對象,。那么這種不需要你自己new對象,而是直接傳進來就是控制反轉了。(不知道比喻的恰不恰當哈)

        依賴注入與控制反轉你是否已經了解了呢,喜歡思考的朋友可能會問了,那這個構造函數里面的IOptions<Content> option 又是怎么出來的?這里就要引入一個容器的概念了。

        什么是容器呢?

        這里創建IOptions<Content> option 這個對象的東西就是容器。還記得上面我們分析源碼的時候,IServiceCollection 里面注入了很多東西嗎?其實就是往IServiceCollection 這個容器里面注入方法,這樣其他地方使用的時候就能自動注入了。

        這就是容器的好處,由容器來統一管理實例的創建和銷毀,你只需要關心怎么用就行了,不需要關系怎么創建跟銷毀。

        當然容器創建的實例都是有生命周期的,。下面羅列一下,就不過多的講解了。

      1. Transient: 每一次訪問都會創建一個新的實例
      2. Scoped: 在同一個Scope內只初始化一個實例 ,可以理解為( 每一個request級別只創建一個實例,同一個http request會在一個 scope內)
      3. Singleton :整個應用程序生命周期以內只創建一個實例
      4. 使用的方式也很簡單,我會在接下來的課程中詳細的通過實例來進行講解!因為現在的例子還沒發演示。

        總結

        本文一步一步帶著你先分析了ASP.NET Core的啟動過程及運行的原理,緊接著給你講了配置文件的加載過程及原理,并通過示例代碼演示了如何加載自定義的配置文件,最后引出了依賴注入以及控制反轉的概念,并通過對我們上面例子的分析來緊身對依賴注入以及控制反轉的理解。至此讓你知其然更知其所以然。對ASP.NET Core的原理相信你已經了然于胸了!那么接下來讓我們再準備下dapper,vue以及git的快速入門就開始我們的asp.net core cms的實戰課程吧!還是那句話基礎很重要,基礎打好,后面才能事半功倍。謝謝大家。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET Core源碼解析配置文件及依賴注入

        .NET Core源碼解析配置文件及依賴注入:寫在前面 上篇文章我給大家講解了ASP.NET Core的概念及為什么使用它,接著帶著你一步一步的配置了.NET Core的開發環境并創建了一個ASP.NET Core的mvc項目,同時又通過一個實戰教你如何在頁面顯示一個Content的列表。不知道你有沒有跟著敲下代碼,千萬不要做眼
        推薦度:
        標簽: net 配置文件 core
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲乱人伦中文字幕无码| 91成人免费观看在线观看| 曰批全过程免费视频播放网站| 国产成人精品免费视| 亚洲色图.com| 国产精品免费久久久久电影网| 亚洲国产电影av在线网址| 久久精品国产亚洲AV无码麻豆| 亚洲一卡2卡三卡4卡无卡下载| 免费A级毛片无码免费视| 亚洲AV无码1区2区久久| 免费手机在线看片| 亚洲人成网亚洲欧洲无码久久| 日韩精品无码免费专区网站| 国产成人一区二区三区免费视频 | 亚洲国产一区二区视频网站| 亚洲综合免费视频| 国内精品99亚洲免费高清| 久久精品国产精品亚洲艾| 男人和女人高潮免费网站| 亚洲熟妇中文字幕五十中出| 91福利视频免费| 中文字幕乱码亚洲精品一区 | 免费的一级黄色片| 日韩免费高清一级毛片| 色猫咪免费人成网站在线观看| vvvv99日韩精品亚洲| 亚洲国产超清无码专区| 日韩免费无砖专区2020狼| 亚洲国产情侣一区二区三区| 在线观看免费国产视频| 中文字幕无码免费久久| 国产亚洲玖玖玖在线观看| 亚洲日韩精品无码专区网站| 久久久久久毛片免费播放| 亚洲AV无码一区二区三区久久精品| 欧美大尺寸SUV免费| 草久免费在线观看网站| 亚洲国产精品午夜电影| 亚洲国产高清在线一区二区三区| 6080午夜一级毛片免费看6080夜福利|