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框架
ASP.NET Core依赖注入(DI)的更多相关文章
- ASP.NET Core 依赖注入(DI)
ASP.NET Core的底层设计支持和使用依赖注入.ASP.NET Core 应用程序可以利用内置的框架服务将服务注入到启动类的方法中,并且应用程序服务也可以配置注入.由ASP.NET Core 提 ...
- # ASP.NET Core依赖注入解读&使用Autofac替代实现
标签: 依赖注入 Autofac ASPNETCore ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Aut ...
- [译]ASP.NET Core依赖注入深入讨论
原文链接:ASP.NET Core Dependency Injection Deep Dive - Joonas W's blog 这篇文章我们来深入探讨ASP.NET Core.MVC Core中 ...
- ASP.NET Core依赖注入——依赖注入最佳实践
在这篇文章中,我们将深入研究.NET Core和ASP.NET Core MVC中的依赖注入,将介绍几乎所有可能的选项,依赖注入是ASP.Net Core的核心,我将分享在ASP.Net Core应用 ...
- ASP.NET Core 依赖注入最佳实践——提示与技巧
在这篇文章,我将分享一些在ASP.NET Core程序中使用依赖注入的个人经验和建议.这些原则背后的动机如下: 高效地设计服务和它们的依赖. 预防多线程问题. 预防内存泄漏. 预防潜在的BUG. 这篇 ...
- ASP.NET Core依赖注入最佳实践,提示&技巧
分享翻译一篇Abp框架作者(Halil İbrahim Kalkan)关于ASP.NET Core依赖注入的博文. 在本文中,我将分享我在ASP.NET Core应用程序中使用依赖注入的经验和建议. ...
- ASP.NET Core依赖注入解读&使用Autofac替代实现【转载】
ASP.NET Core依赖注入解读&使用Autofac替代实现 1. 前言 2. ASP.NET Core 中的DI方式 3. Autofac实现和自定义实现扩展方法 3.1 安装Autof ...
- ASP.NET Core 依赖注入基本用法
ASP.NET Core 依赖注入 ASP.NET Core从框架层对依赖注入提供支持.也就是说,如果你不了解依赖注入,将很难适应 ASP.NET Core的开发模式.本文将介绍依赖注入的基本概念,并 ...
- ASP.NET Core 依赖注入(构造函数注入,属性注入等)
原文:ASP.NET Core 依赖注入(构造函数注入,属性注入等) 如果你不熟悉ASP.NET Core依赖注入,先阅读文章: 在ASP.NET Core中使用依赖注入 构造函数注入 构造函数注 ...
随机推荐
- ES6中对象的扩展
ES6不仅为字符串.数值和数组带来了扩展,也为对象带来了很多新特性.这一节,我们来一起学习一下对象的扩展. 对象的传统表示法 我们回顾一下,对象的传统表示法: let person = { " ...
- PG TO Oracle 增量同步-外部表
背景 最近在负责公司数据Oracle转PG:老平台数据库:Oracle11g:新平台数据库:PostgreSQL12.由于平台统计规则有变动:所以正在推广的游戏数据无法全部迁移过来:只能在老平台上运行 ...
- 在项目中部署redis的读写分离架构(包含节点间认证口令)
#### 在项目中部署redis的读写分离架构(包含节点间认证口令) ##### 1.配置过程 --- 1.此前就是已经将redis在系统中已经安装好了,redis utils目录下,有个redis ...
- 从Mac中完全删除office
sudo sh -c "curl -s https://raw.githubusercontent.com/jimye/OfficeUninstall/master/office_unins ...
- urlencode()和rawurlencode()区别
urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的 ,唯一的不同是对空格的处理, urlencode处理成“+”, rawurlencod ...
- /sbin/mount.vboxsf: mounting failed with the error: Protocol error
公司换了新电脑,需要把之前的虚拟机的配置全部备份下来,在移动的过程中挂载共享文件夹时候出现了 /sbin/mount.vboxsf: mounting failed with the error: P ...
- java中ThreadLocalRandom的使用
java中ThreadLocalRandom的使用 在java中我们通常会需要使用到java.util.Random来便利的生产随机数.但是Random是线程安全的,如果要在线程环境中的话就有可能产生 ...
- pip安装openvc-python国内镜像源
采用清华大学的镜像源. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghu ...
- Vue Cli 3 打包上线 部署到Apache Tomcat服务器
使用 npm run build 打包项目 在根目录中有一个dist文件夹 我使用的服务器是 Apache Tomcat 把项目放进tomcat /webapps 中 启动服务器 <mac O ...
- Golang-filepath使用
Golang-filepath 使用 获取当前目录 os.GetPWD() filepath.Abs(path) # 绝对目录 filepath.Dir(path) # 相对目录 可以 filepat ...