ASP.NET Core容許咱們指定註冊服務的生存期.服務實例將根據指定的生存時間自動處理.所以,咱們無需擔憂清理此依賴關係,他將由ASP.NET Core框架處理.有以下三種類型的生命週期.
關於依賴注入通俗易懂的內容你們能夠看一下我上一篇文章 .NET IoC模式依賴反轉(DIP)、控制反轉(Ioc)、依賴注入(DI)
Microsoft.Extensions.DependencyInjection.ServiceLifetime枚舉值html
public enum ServiceLifetime { Singleton, Scoped, Transient }
應用程序將在該應用程序生命週期內建立並共享這個實例.可使用IServiceCollection的AddSingleton方法將服務做爲單例添加。ASP.NET Core在註冊時建立服務實例,而且在每次請求使用該服務實例.框架
咱們可使用它在每次請求時都會去建立一個新的實例.可使用IServiceCollection的AddTransient方法將服務添加爲Transient.函數
將根據應用程序的請求建立並共享服務實例.這意味着每一個請求可使用一個服務實例.他將爲每一個新請求建立一個新實例.可使用IServiceCollection的AddScoped方法將服務添加爲Scoped.this
ASP.NET Core具備構造函數的默認支持,控制器所需的依賴只是在構造函數中向控制器添加服務.ASP.NET Core他會識別該服務類型而且會去解析該類型.code
private readonly IMessage _message; public HomeController(IMessage message){ this._message=message; } public IActionResult Index(){ ViewData["msg"] = _message.Get(); return View(); }
ASP.NET Core他可讓咱們經過FromServices屬性將依賴注入htm
public IActionResult Index([FromServices]IMessage message){ ViewData["msg"] = message.Get(); return View(); }
這種狀況服務不會做爲參數注入到控制器構造函數或Controller中.使用HttpContext.RequestServices的GetService方法咱們能夠得到這個Service容器配置的依賴服務.blog
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框架get