dependency-injection - .NET Core - 注册服务,如何注册服务的单独版本
问题描述
我有一个接口IService
和两个实现ServiceA
,并且ServiceB
.
大多数时候我想使用实现A
,但我也有另一个需要实现的服务B
。有没有办法做到这一点?它应该看起来像这样:
services.AddScoped<IService, ServiceA>();
services.AddScoped<ISomethingElse, SomethingElse>();
services.WhenResolving<ISomethingElse>.AddScoped<IService, ServiceB>();
解决方案
我将提到这样做的两个版本。
首先,假设您有配置参数,并根据您的配置参数决定您的接口将解析哪个服务
然后
services.AddScoped<ISomethingElseService, SomethingService>();
if (Configuration["MyServiceParam"] == "X")
services.AddScoped<ISomethingService, SomethingElseService>();
另一种选择是
services.AddScoped<ISomethingService>(s => {
var MyServiceA = s.GetService<MyServiceA>();
if (MyServiceA is null)
return new SomethingElseService();
else
return new SomethingService(MyServiceA);
});
推荐阅读
- boolean - 如何在表单加载的表中将是/否值设置为否以注销所有用户
- c++ - 任何人都可以像我 5 岁那样解释变量如何在函数上工作吗?
- android - 为什么 ppoll() 不等待我在 Android Pie 中的延迟?
- python - Pandas:读取 CSV 时出现强制错误
- scala - scala中错误的顶级声明声明
- visual-studio-code - 如何关闭 ESLint 规则以便代码编译?
- python - 如何为 pandas.cut 函数定义(和命名)间隔?
- python - 从另一个文件导入变量会产生错误
- google-apps-script - 将值从活动工作表复制到另一个工作表
- python - 错误; 字符串索引必须是整数,很确定值是整数