gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:17:52 24 4
gpt4 key购买 nike

我正在努力思考依赖注入(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com