【发布时间】:2018-05-18 12:34:51
【问题描述】:
将IServiceProvider 注入到服务类中,作为在 ASP.NET Core 2.0 中获取可选依赖项的一种方法,这是一种不好的做法吗?这会破坏Explicit Dependency Principal吗?
我有一个需要可选服务 EventBus 的类。如果 EventBus 已注册,我希望服务类发布一个事件,如果不是简单地忽略它。
public class SomeService {
private readonly IServiceProvider _serviceProvider;
public SomeService(IServiceProvider serviceProvider) {
_serviceProvider = serviceProvider;
}
public SomeAction() {
var eventBus = _serviceProvider.GetService(typeof(IEventBus)) as IEventBus;
if (eventBus != null) {
eventBus.publish("SomeAction Happened!");
}
}
}
我看不到如何使用 ASP.NET Core 2.0 的内置 IoC 容器创建可选依赖项。
编辑:关于如何在 ASP.NET Core 中实现可选依赖项的任何建议?或者在没有反模式的情况下获得相同效果的任何其他策略?
【问题讨论】:
-
这就是所谓的服务定位器,是的,这是一个你应该避免的反模式
标签: c# asp.net-core dependency-injection anti-patterns