1. 程式人生 > >ASP.NET Core依賴注入(DI)

ASP.NET Core依賴注入(DI)

ASP.NET Core允許我們指定註冊服務的生存期.服務例項將根據指定的生存時間自動處理.因此,我們無需擔心清理此依賴關係,他將由ASP.NET Core框架處理.有如下三種類型的生命週期. 關於依賴注入通俗易懂的內容大家可以看一下我上一篇文章 [.NET IoC模式依賴反轉(DIP)、控制反轉(Ioc)、依賴注入(DI)](https://www.cnblogs.com/yyfh/p/12874075.html) Microsoft.Extensions.DependencyInjection.ServiceLifetime列舉值 ```csharp 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他會識別該服務型別並且會去解析該型別. ```csharp private readonly IMessage _message; public HomeController(IMessage message){ this._message=message; } public IActionResult Index(){ ViewData["msg"] = _message.Get(); return View(); } ``` ### 方法注入 ASP.NET Core他可以讓我們通過FromServices屬性將依賴注入 ```csharp public IActionResult Index([FromServices]IMessage message){ ViewData["msg"] = message.Get(); return View(); } ``` ### 手動注入 這種情況服務不會作為引數注入到控制器建構函式或Controller中.使用HttpContext.RequestServices的GetService方法我們可以獲得這個Service容器配置的依賴服務. ```csharp public IActionResult Index(){ var message=(IMessage)this.HttpContext.RequestServices.GetService(typeof(IMessage)); ViewData["msg"] = message.Get(); return View(); } ``` ### 服務註冊到檢視 它也可以將依賴項注入到View.正如下面程式碼片段我們可以使用@inject指令將服務依賴項注入到檢視中. ```csharp @inject IMessage message

@message.Get()

``` 並沒有為我們預設提供屬性注入.如果有需要可以參考第三方Io