网站首页 > 教程分享 正文
前言
假设我们有三个Service类实现了同一接口,示例代码如下:
public interface IService { }
public class ServiceA : IService { }
public class ServiceB : IService { }
public class ServiceC : IService { }
我们希望在运行时使用依赖注入指定其具体实现类。
在本文中,我们将演示如何使用HTTP请求设置依赖项设置来实现。
Demo
首先,在Startup.cs中做多个实现类注册:
services.AddHttpContextAccessor();
services.AddTransient<ServiceA>();
services.AddTransient<ServiceB>();
services.AddTransient<ServiceC>();
services.AddTransient<IService>(serviceProvider =>
{
var context = serviceProvider.GetRequiredService<IHttpContextAccessor>();
var containsKey = context.HttpContext?.Request?.Query?.ContainsKey("key");
var key = containsKey.HasValue && containsKey.Value ? context.HttpContext?.Request?.Query?["key"].First(): "A";
switch (key)
{
case "A":
return serviceProvider.GetService<ServiceA>();
case "B":
return serviceProvider.GetService<ServiceB>();
case "C":
return serviceProvider.GetService<ServiceC>();
default:
throw new KeyNotFoundException();
}
});
在这里,我们通过获取HTTP上下文并检查是否定义了key查询字符串参数。
现在,可以向普通方式一样使用IService,示例代码如下:
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly IService _service;
public DemoController(IService service)
{
this._service = service;
}
[HttpGet]
public async Task<string> Get()
{
return _service.GetType().Name;
}
}
通过从查询字符串中读取值,可以控制具体的IService实现类:
结论
当然,我们不仅可以将此策略用于查询字符串中的值,还可以对标头、Body等HTTP请求包含的任何值使用此策略。
猜你喜欢
- 2025-05-08 ASP.NET Core项目实战:短信功能与分布式限流
- 2025-05-08 如何在 ASP.NET Core 中为同一接口配置不同的实现
- 2025-05-08 ASP.NET Core 本地化技巧,让你的应用瞬间支持多语言
- 2025-05-08 ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用
- 2025-05-08 初识.Net Core Mvc(session 登录+查询)
- 2025-05-08 Winform开发技术详解 - 应用环境 & 相关技术介绍
- 2025-05-08 ASP.NET 8 写扩展(asp.net viewbag)
- 2025-05-08 如何在服务器端使用ASP.NET Core 2创建甘特图?
- 2025-05-08 Asp.Net Core + jenkins 实现自动化发布
- 2025-05-08 Asp.Net在线预览Word文档的解决方案与思路
你 发表评论:
欢迎- 最近发表
-
- IT之家学院:使用PIN或密码审批管理员权限
- Yarn 安装的时候提示错误 error:0308010C:digital envelope routines
- Windows常用的一些CMD运行命令(windows常见的命令)
- 电脑忘记开机密码10秒解决(戴尔电脑忘记开机密码10秒解决)
- 如何下载Windows 10聚焦提供的锁屏壁纸
- Windows CMD 命令大全:简单粗暴收藏!
- 系统小技巧:解决CHKDSK只读模式问题
- Windows的cmd都有哪些奇技淫巧?这22个CMD命令记得收藏起来!
- windows错误代码0x80072EE2?win10系统更新错误问题的处理方法
- Windows 10技术预览版快捷键方式汇总
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)