我从ASP.NET MVC开始,并尝试同时学习DI和依赖性反转。我正在设置MVC项目,其中控制器和视图驻留在一个程序集中,我还有一些用于域模型和服务的程序集,以及大多数实际业务逻辑。
计划是让我的所有服务都实现接口。调用服务的控制器通过这些接口访问它们。实例化使用Ninject DI框架完成。
现在的实际问题;谁“拥有”接口?根据我对依赖性反转的理解,服务接口将由控制器拥有,因此驻留在该程序集中。
答案 0 :(得分:0)
接口必须对实现者可见。消费者可以看到实施。如果要将实现与接口分开以便可以单独部署它们,则接口应驻留在它们自己的程序集中。
如果您足够自律地根据命名空间组织代码并且没有特殊的部署要求,那么接口可以与实现位于同一个程序集中。
答案 1 :(得分:0)
服务接口(通常提供数据并实现为WCF)需要驻留在单独的DLL上,而MVC将引用。
所以这是将类和接口拆分为项目(和程序集)的典型(和基本):
答案 2 :(得分:0)
您的所有组件都不得拥有接口。良好的界面是他们自己的动物 - 他们只需要对控制器和服务都可见。
将它们物理隔离creates headaches that may be unnecessary - 我建议您在没有充分理由的情况下不使用多个程序集。