ASP.NET Core依赖注入(DI)
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框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构