ASP.NET Core依賴註入(DI)

来源:https://www.cnblogs.com/yyfh/archive/2020/05/19/12915067.html
-Advertisement-
Play Games

ASP.NET Core允許我們指定註冊服務的生存期.服務實例將根據指定的生存時間自動處理.因此,我們無需擔心清理此依賴關係,他將由ASP.NET Core框架處理.有如下三種類型的生命周期. 關於依賴註入通俗易懂的內容大家可以看一下我上一篇文章 ".NET IoC模式依賴反轉(DIP)、控制反轉( ...


ASP.NET Core允許我們指定註冊服務的生存期.服務實例將根據指定的生存時間自動處理.因此,我們無需擔心清理此依賴關係,他將由ASP.NET Core框架處理.有如下三種類型的生命周期.
關於依賴註入通俗易懂的內容大家可以看一下我上一篇文章 .NET IoC模式依賴反轉(DIP)、控制反轉(Ioc)、依賴註入(DI)
Microsoft.Extensions.DependencyInjection.ServiceLifetime枚舉值

public enum ServiceLifetime
{
  Singleton,
  Scoped,
  Transient
}

Singleton

應用程式將在該應用程式生命周期內創建並共用這個實例.可以使用IServiceCollection的AddSingleton方法將服務作為單例添加。ASP.NET Core在註冊時創建服務實例,並且在每次請求使用該服務實例.

Transient

我們可以使用它在每次請求時都會去創建一個新的實例.可以使用IServiceCollection的AddTransient方法將服務添加為Transient.

Scoped

將根據應用程式的請求創建並共用服務實例.這意味著每個請求可以使用一個服務實例.他將為每個新請求創建一個新實例.可以使用IServiceCollection的AddScoped方法將服務添加為Scoped.

控制器依賴註入

ASP.NET Core具有構造函數的預設支持,控制器所需的依賴只是在構造函數中向控制器添加服務.ASP.NET Core他會識別該服務類型並且會去解析該類型.

private readonly IMessage _message;
public HomeController(IMessage message){
    this._message=message;
}
public IActionResult Index(){
    ViewData["msg"] = _message.Get();
    return View();
}

方法註入

ASP.NET Core他可以讓我們通過FromServices屬性將依賴註入


public IActionResult Index([FromServices]IMessage message){
    ViewData["msg"] = message.Get();
    return View();
}

手動註入

這種情況服務不會作為參數註入到控制器構造函數或Controller中.使用HttpContext.RequestServices的GetService方法我們可以獲得這個Service容器配置的依賴服務.


public IActionResult Index(){
    var message=(IMessage)this.HttpContext.RequestServices.GetService(typeof(IMessage));
    ViewData["msg"] = message.Get();
    return View();
}

服務註冊到視圖

它也可以將依賴項註入到View.正如下麵代碼片段我們可以使用@inject指令將服務依賴項註入到視圖中.

@inject IMessage message
<h1>@message.Get()</h1>

並沒有為我們預設提供屬性註入.如果有需要可以參考第三方Ioc框架


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

-Advertisement-
Play Games
更多相關文章
  • 最近在做發票的批量開票處理,發現航信的開票軟體V2.3.10.200301 竟然連個介面都沒有…咨詢航信竟然是幾萬塊一個,是一個license而且每年收取服務費,也太貴了…這是稅務的介面竟然它收費!!!好吧,研究一下繞道處理。自己生成註冊碼…哈哈搞定。 ...
  • 時間格式我使用的一直都是 yyyy-MM-dd HH:mm:ss,然後某天,我改成了 yyyy/MM/dd HH:mm:ss,然後神奇的問題就來了。 ...
  • 近來有一個報名網站原來是內網訪問的,近期要放到外網訪問,但要求密碼不能明文傳輸。在網上參考了幾個帖子並整理出來: asp.net 前端JS RSA加密,後端c#解密 在分享源碼之前,先準備一些東西:1、下載一個js加密幫助文件,下載地址:https://passport.cnblogs.com/sc ...
  • SoundPlayer是為應用程式添加音頻功能最簡單、最輕量型的方法,但只能播放wav格式的語音。 百度線上語音合成可以合成wav格式的語音,保存為本地文件,SoundPlayer出錯,仔細看文檔發現百度的wav就是pcm 16k(3為mp3格式(預設); 4為pcm 16k;5為pcm 8k;6為 ...
  • .NET Core 3.1 跨域請求 (CORS) 在用ajax進行請求伺服器資源時如果協議+主機名+埠號 (如存在)相同則允許交互,否則會出現跨域問題,不能訪問和操作其他域下的資源。常用解決方式有在前端使用jsonp和在後端啟用CORS。 jsonp可以支持get請求,但不支持post請求。完美 ...
  • C#關於Excel文件轉TXT文本的實現 沒什麼可介紹的,但是要註意文件的地址別寫錯了,如下是具體實現代碼: private DataTable FileToDataTable(string fileName,string sheetName) { Monster m = new Monster() ...
  • C#實現建立Excel文件,填充數據後保存 直接代碼,相關註釋見下代碼: static void Main(string[] args) { string filePath = @"F:\Test\Excel\"; CreateExcel(filePath); } public static voi ...
  • 一.docker的安裝與加速器配置 安裝docker:yum install docker (預設安裝路徑/var/lib/docker) 啟動docker服務:systemctl start docker.service (sudo service docker start) 配置開機啟動並驗證: ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...