c# - 项目之间的依赖注入(inject)

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

我正在努力思考依赖注入(inject)的概念。我有一个 Visual Studio 解决方案。我将它分成 3 个项目:DataAccessLayer、ServiceLayer、BusinessLogicLayer。

ServiceLayer 充当 BusinessLogic 和 DataAccess 之间的链接,从 BusinessLogic 中隐藏 SQL 和 LINQ 语句等内容。

现在网上很多教程都推荐使用DependencyInjection在我的BusinessLayer中使用ServiceLayer中的类。我相信,原因是 BusinessLayer 与 ServiceLayer 松耦合。然而,当这两层(及其对应的类)在不同的项目中时,我不完全理解如何实现这一点。

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

我希望有人能给我一个“Dependency Injection for Dummies”之类的答案来解释我的理解错误的地方。提前谢谢你:)

最佳答案

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

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

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

您将拥有以下项目:

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

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

关于c# - 项目之间的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30150291/

相关文章:

c# - Div 不会在更新面板中淡出

c# - 浮点除法返回整数

c++ - 泛型 std::function 上的包装类

java - 用 dagger 2 查看依赖注入(inject)

c# - 为什么 DI 会为两个不同的范围返回相同的 DbContext?

java - Spring注入(inject)接口(interface)的两个实现以使用桥接设计模式

c# - 应用程序卡在 Lock 语句上

c# - 从基本 Controller 获取操作过滤器列表

visual-studio-2013 - Microsoft.Web.Publishing.targets 在哪里?

.net - My.Settings 不保存 ArrayList