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