依赖倒置 - 接口的所有者?

时间:2011-01-11 17:30:09

标签: asp.net-mvc dependency-injection

我从ASP.NET MVC开始,并尝试同时学习DI和依赖性反转。我正在设置MVC项目,其中控制器和视图驻留在一个程序集中,我还有一些用于域模型和服务的程序集,以及大多数实际业务逻辑。

计划是让我的所有服务都实现接口。调用服务的控制器通过这些接口访问它们。实例化使用Ninject DI框架完成。

现在的实际问题;谁“拥有”接口?根据我对依赖性反转的理解,服务接口将由控制器拥有,因此驻留在该程序集中。

3 个答案:

答案 0 :(得分:0)

接口必须对实现者可见。消费者可以看到实施。如果要将实现与接口分开以便可以单独部署它们,则接口应驻留在它们自己的程序集中。

如果您足够自律地根据命名空间组织代码并且没有特殊的部署要求,那么接口可以与实现位于同一个程序集中。

答案 1 :(得分:0)

服务接口(通常提供数据并实现为WCF)需要驻留在单独的DLL上,而MVC将引用。

所以这是将类和接口拆分为项目(和程序集)的典型(和基本):

  • 通用
  • 实体(参考通用)
  • 服务接口(参考通用和实体)
  • 服务实施(参考以上所有内容)
  • 演示文稿(参考上述所有内容,但实现)并且有WCF处理,查看特定逻辑
  • MVC项目(参考上述所有内容,但实现)

答案 2 :(得分:0)

您的所有组件都不得拥有接口。良好的界面是他们自己的动物 - 他们只需要对控制器和服务都可见。

将它们物理隔离creates headaches that may be unnecessary - 我建议您在没有充分理由的情况下不使用多个程序集。