项目之间的依赖注入

时间:2015-05-10 10:27:20

标签: c# visual-studio-2013 dependency-injection

我试图围绕依赖注入的概念。我有一个visual studio解决方案。我将它拆分为3个项目:DataAccessLayer,ServiceLayer,BusinessLogicLayer。

ServiceLayer充当BusinessLogic和DataAccess之间的链接,隐藏了来自BusinessLogic的SQL和LINQ语句。

现在,许多在线教程建议使用DependencyInjection在我的BusinessLayer中使用ServiceLayer中的类。我相信,原因是BusinessLayer与ServiceLayer松散耦合。但是,当这两个层(及其相应的类)位于不同的项目中时,我并不完全理解如何实现它。

根据在线教程,我将在ServiceLayer中让我的类实现一个接口,这将在我的BusinessLayer中引用。但是应该定义哪个项目的接口?这个接口在ServiceLayer中定义是有道理的。但是,不会从BusinessLayer引用这个接口导致这些项目之间的紧密耦合逻辑?这会夺走依赖注入的好处吗?

我希望有人可以给我一个“傻瓜依赖注射”这样的答案,解释我的理解是错误的。提前谢谢你:)

1 个答案:

答案 0 :(得分:3)

依赖注入是一件好事,因为它使您的代码独立于其他代码片段的实现。所有依赖项都应该通过构造函数(有时属性)注入,其中只声明接口而不是实现。

在这种情况下,您可以例如注入虚假实现来运行单元测试。您还可以编写多个版本,例如,您可以使用通用接口支持多个数据库,并根据用户的选择注入适当的实现。

现在如何实现它。您可以将接口提取到另一个项目,例如“Common”。这将阻止您在不需要它们的情况下添加对实现的引用。然后您的BusinessLayer和ServiceLayer将引用Common。

您将拥有以下项目:

  • Common - 依赖接口
  • ServiceLayer - 引用Common并实现这些接口
  • BusinessLayer - 引用Common并在构造函数中使用这些接口
  • Root - 它可以是例如WPF应用程序。它引用了所有图层。应该有一种机制能够从BusinessLayer创建实例并从ServiceLayer向它们注入适当的实现

您不必实现自己的IoC和DependencyInjection。你可以查看一下例如:Caliburn.Micro - 我真的很喜欢这个框架。