我的代码部分依赖于同一接口的多个实现,而其他部分依赖于其中一个实现。我正在注册以下实现:services.AddSingleton<MyInterface, FirstImplementation>();services.AddSingleton<MyInterface, SecondImplementation>();然后在需要时获取两种实现,例如:var implementations= serviceProvider.GetServices<MyInterface>();我的问题是当我需要其中之一时,我正在尝试以下返回空值的方法:var firstImplementation= serviceProvider.GetService<FirstImplementation>();我当然可以使用:var implementations= serviceProvider.GetServices<MyInterface>();foreach (var implementation in implementations){ if (typeof(FirstImplementation) == implementation.GetType()) { FirstImplementation firstImplementation = (FirstImplementation)implementation; }}但我想我可以FirstImplementation 以某种方式直接得到我的。
3 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
实际上你所做的不是一个好习惯,你可以创建两个不同的接口继承自你的基本接口(MyInterface),然后在适当的接口上注册对应的每个实现,然后在你需要特定实现的代码部分你可以从 IoC 那里询问 go 给你重要接口的具体实现:
执行
public interface IFirstImplementation:MyInterface {} public interface ISecondImplementation:MyInterface {}
注册
services.AddTransient<IFirstImplementation, FirstImplementation>(); services.AddTransient<ISecondImplementation, SecondImplementation>();
用法
var firstImplementation= serviceProvider.GetService<IFirstImplementation>();
- 3 回答
- 0 关注
- 236 浏览
添加回答
举报
0/150
提交
取消