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框架
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/30462.html
標籤:.NET Core
上一篇:Dotnet core使用JWT認證授權最佳實踐(二)
下一篇:VS編譯命令
