您现在的位置是:首页 >学无止境 >.NET Core内置依赖注入容器,一个接口多个实现网站首页学无止境
.NET Core内置依赖注入容器,一个接口多个实现
简介.NET Core内置依赖注入容器,一个接口多个实现
直接贴代码
1、定一个接口
public interface IHomeService
{
string GetMessage();
}
2、定义2个实现
//实现A
public class HomeServiceA : IHomeService
{
public string GetMessage()
{
return typeof(HomeServiceA).Name;
}
}
//实现B
public class HomeServiceB : IHomeService
{
public string GetMessage()
{
return typeof(HomeServiceB).Name;
}
}
3、注册服务(核心),根据类型类型判定返回不同的服务
//我这里使用里扩展方法,将服务注册抽离出来。让program看起来更简洁
public static class IServiceCollectionExtension
{
public static void AddServices(this IServiceCollection services)
{
services.AddScoped<HomeServiceA>();
services.AddScoped<HomeServiceB>();
services.AddScoped<Func<Type, IHomeService>>((serviceProvider) =>
{
Func<Type, IHomeService> accessor = key =>
{
if (key == typeof(HomeServiceA))
return serviceProvider.GetService<HomeServiceA>();
else if (key == typeof(HomeServiceB))
return serviceProvider.GetService<HomeServiceB>();
throw new ArgumentException($"不支持的DI Key: {key}");
};
return accessor;
});
}
}
4、使用
[Route("api/[controller]")]
[ApiController]
public class HomeController : ControllerBase
{
private readonly IHomeService _homeService;
public HomeController(Func<Type,IHomeService> func)
{
//假设我要HomeServiceA实现这里就这么写;如果要HomeServiceB实现,将这里的A改为B即可
_homeService = func(typeof(HomeServiceA));
}
[HttpGet]
public Result GetServiceType() {
//这里是使用测试
return new Result() { code = 1, message = "成功",data = _homeService.GetMessage() };
}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。





U8W/U8W-Mini使用与常见问题解决
QT多线程的5种用法,通过使用线程解决UI主界面的耗时操作代码,防止界面卡死。...
stm32使用HAL库配置串口中断收发数据(保姆级教程)
分享几个国内免费的ChatGPT镜像网址(亲测有效)
Allegro16.6差分等长设置及走线总结