Asp.Net Core 减少Controller获取重复注入对象
原文:Asp.Net Core 减少Controller获取重复注入对象
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012770274/article/details/80876054
在使用Asp.Net Core的时候我们都会用到依赖注入获取自定义的服务,如果是仓储的话可能还好,不同的controller需要用到不同的仓储,通过构造函数注入也算明确了业务关系。可是在使用到日志服务,缓存服务等工具类服务的时候往往会发现在大多数的controller中都要通过构造函数获取一遍注入服务,是件很麻烦的事。现在的想法是通过创建继承自Controller的BaseController类,在BaseController获取到所有的服务,之后其他controller再继承自BaseController获取到这些服务。下面来看下实现方式。
使用的是.net core 2.1。
在Startup的ConfigureServices添加HttpContextAccessor服务
services.AddHttpContextAccessor();
创建自定义的服务和接口
public interface IMyService
{
string GetGuId();
}
public class MyService : IMyService
{
private string guid = Guid.NewGuid().ToString();
public string GetGuId()
{
return guid;
}
}
在Startup的ConfigureServices中注册自定义服务
//services.AddSingleton<IMyService, MyService>();
//services.AddTransient<IMyService, MyService>();
services.AddScoped<IMyService, MyService>();
定义静态类ServiceLocator
public static class ServiceLocator
{
public static IServiceProvider Instance { get; set; }
}
在Startup的Configure为ServiceLocator.Instance赋值
ServiceLocator.Instance = app.ApplicationServices;
在BaseController的构造方法里通过ServiceLocator.Instance获取IHttpContextAccessor,再使用IHttpContextAccessor获取注册的自定义服务。这里不直接使用ServiceLocator.Instance.GetService方法获取自定义服务是,因为如果使用Scoped方式注册服务的话这里获取服务会报错。
public class BaseController : Controller
{
protected IMyService _myService;
public BaseController()
{
var hca = ServiceLocator.Instance.GetService<IHttpContextAccessor>();
_myService = hca.HttpContext.RequestServices.GetService<IMyService>();
}
}
让自定义的Controller继承自BaseController,通过BaseController获取自定义服务
public IActionResult GetGuId()
{
return Content(_myService.GetGuId());
}
这里特别感谢 田园里的蟋蟀 的《ASP.NET Core DI 手动获取注入对象》
Asp.Net Core 减少Controller获取重复注入对象的更多相关文章
- ASP.NET Core DI 手动获取注入对象
ASP.NET Core DI 一般使用构造函数注入获取对象,比如在ConfigureServices配置注入后,通过下面方式获取: private IValueService _valueServi ...
- ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ...
- [ASP.NET Core 3框架揭秘] 依赖注入[3]:依赖注入模式
IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照"好莱坞法则"实现应用程序的代码与框架之间的交互.我们可以采用若干设计模式 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[2]:IoC模式
正如我们在<依赖注入:控制反转>提到过的,很多人将IoC理解为一种"面向对象的设计模式",实际上IoC不仅与面向对象没有必然的联系,它自身甚至算不上是一种设计模式.一般 ...
- [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式
原文:[ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式 IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照“好莱坞法则”实现应用 ...
- [ASP.NET Core 3框架揭秘] 依赖注入:IoC模式
原文:[ASP.NET Core 3框架揭秘] 依赖注入:IoC模式 正如我们在<依赖注入:控制反转>提到过的,很多人将IoC理解为一种“面向对象的设计模式”,实际上IoC不仅与面向对象没 ...
- [ASP.NET Core 3框架揭秘] 依赖注入:控制反转
ASP.NET Core框架建立在一些核心的基础框架之上,这些基础框架包括依赖注入.文件系统.配置选项和诊断日志等.这些框架不仅仅是支撑ASP.NET Core框架的基础,我们在进行应用开发的时候同样 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[5]: 利用容器提供服务
毫不夸张地说,整个ASP.NET Core框架是建立在依赖注入框架之上的.ASP.NET Core应用在启动时构建管道以及利用该管道处理每个请求过程中使用到的服务对象均来源于依赖注入容器.该依赖注入容 ...
- [ASP.NET Core 3框架揭秘] 依赖注入[4]:一个Mini版的依赖注入框架
在前面的章节中,我们从纯理论的角度对依赖注入进行了深入论述,我们接下来会对.NET Core依赖注入框架进行单独介绍.为了让读者朋友能够更好地理解.NET Core依赖注入框架的设计与实现,我们按照类 ...
随机推荐
- ElementUI中如何实现Form表单内的文字居中
<el-table :data='orderList' border stripe :align='center' :cell-style='cellStyle' :header-cell-st ...
- decodeURIComponent 解码函数
想象一个场景,你朋友发一个链接让你打开,但链接是下面其中之一,你会不会想锤死他 1. \u0068\u0074\u0074\u0070\u003a\u002f\u002f\u0062\u0069\u0 ...
- SATA接口、PCI/PCIe、NVMe的介绍
SATA接口.PCI/PCIe.NVMe的介绍 SATA接口 SATA是Serial ATA的缩写,即串行ATA. SATA已经完全取代旧式PATA(Parallel ATA或旧称IDE)接口的旧式硬 ...
- KVM virsh console
(1) 查看正在运行的虚拟机 root@kvm:~# virsh list Id Name State ------------------------------------------------ ...
- C 数组、枚举类型enum
传递数组给函数 告诉编译器函数要接受一个指针 skip //函数声明,数组的长度无需声明,因为编译器不会对形式参数进行边界检查 void myFunction(int param[]) //或者 vo ...
- vue--购物车案例(小知识点总结)
Html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- EFLAGS寄存器(标志寄存器)
这篇文章不是从0开始的,前面还有一些汇编基础指令以及进制,我都没写,时间问题,还是今天空闲,我才想补一下博文,后面我陆续会把前面知识点渐渐补上.我不会重0基础讲起,中间会以.汇编.C.C++交叉的形式 ...
- Python实现MQTT接收订阅数据
一.背景 目前MQTT的标准组织官网:http://www.mqtt.org,里面列出了很多支持的软件相关资源. 一个轻量级的MQTT服务器是:http://www.mosquitto.org,可以运 ...
- MySQL详细安装(windows)
一.在MySQL官网上下载MySQL Community Server(目前推荐5.7版本,8.0版本在安装的时候遇到的问题比较多) 点击DOWNLOADS→Community→MySQL Commu ...
- composer基本操作详解
原文转自微信公众号:qq1005349393 Composer介绍 Composer 是 PHP 的一个包依赖管理工具.我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库 ...