我的应用程序可能包含80多个Web-Api控制器。每个控制器都有以下构造函数定义:
public class AlertsController : ApiController
{
IAlertsService _alertsService;
public AlertsController(IAlertsService alertsService)
{
_alertsService = alertsService;
}
}
所以每次我必须为了使用IoC而定义一个新接口,仅此而已。问题是我没有发现有这么多的接口只是为了避免耦合层。是否存在继续使用IoC的解决方案,但在我的情况下,没有必要定义如此多的接口?
提前致谢,
答案 0 :(得分:0)
OP未指定IAlertsService
的用途,但是在Dependency Inversion Principle之后,客户端应定义他们需要的API,然后由具体决定类以实现所需的API。
为了便于讨论,我们假设IAlertsService
看起来像这样:
public interface IAlertsService
{
void Foo(Bar bar);
Baz Qux();
}
无需定义任何接口,您可以改为注入两个委托,如下所示:
public class AlertsController : ApiController
{
private readonly Action<Bar> foo;
private readonly Func<Baz> qux;
public AlertsController(Action<Bar> foo, Func<Baz> qux)
{
this.foo = foo;
this.qux = qux;
}
}
如果一个类只需要foo
功能,就不需要注入qux
,反之亦然。
由于基类库已经定义了泛型Action
和Func
委托,因此您不必为依赖项声明任何新类型。
一旦习惯了这种编程风格,您可能会意识到自己只是在做ad-hoc, impure, 'functional' programming,在这种情况下,最好使用F#进行编程。