问题标签 [dependency-inversion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
68 浏览

c# - 我正在学习如何在 C# 中实现依赖注入 [DI]。这是作为示例的有效 DI 程序吗?

1.主要方法

2.BusinessLogic类实现IBusinessLogic接口

3.Logger类实现ILogger接口

4、DataAccess类实现IDataAccess接口

4. 接口

关于上面的代码,我3 interfaces为所有......BusinessLogicLoggerDataAccess3 classes respectively

如果是这样,correct implementation for Dependency Injection那么让我知道improvements or suggestions代码(如果有的话)......

或者,如果是的话NOT correct,建议我进行修改以实现相同的效果。

提前致谢!

0 投票
0 回答
66 浏览

spring-boot - 跨不同项目模块实现接口的最佳实践

我有一个多模块应用程序,由一个接口module A和一个实现组成module B。模块 A 使用依赖反转链接到模块 B,其中通过 @Autowiringmodule B注入。module A主应用程序将实现两者module A and B,因此不会有任何错误。但是,如果module A它自己运行,它将无法找到实现并抛出错误。

我可以征求您的意见,我们应该如何最好地实现依赖倒置以遵循 CLEAN 架构并允许module A自己运行?

希望这张图能更好地说明我们的问题 多模块图

0 投票
1 回答
155 浏览

java - 这在实现多个接口时是否仍然遵循依赖倒置原则?

很抱歉这个问题很长,还有我的英语。

我正在阅读一篇关于 DIP 的文章。我将在这里总结代码。

他们创建了两个不同的 CoffeeMachine。BasicCoffeeMachine 和 PremiumCoffeeMachine。它们都具有相同的功能是 brewFilterCoffee(); 所以他们把它放在CoffeeMachine界面上

当他们创建CoffeeApp时,它在构造函数中接受CoffeeMachine接口并使用它来prepareCoffee()

在主班。

我在这里感到困惑,因为他们没有提到他们如何在 CoffeeApp 中使用brewEspressoCoffee()。所以我继续像这样修改CoffeeApp:

在 Main 类中,如果我想brewEspressoCoffee(),我只需创建一个实现EspressoMachine的实例

这还是下面的DIP吗?还有比这个例子更好的方法吗?任何示例将不胜感激。

谢谢!!

0 投票
0 回答
121 浏览

python - 尝试在 Python 中使用依赖反转来处理循环依赖

这是一个说明问题的简单图表

描述:有一个包含 Source 实体的 Pipeline 实体,Source 使用 SourceValidator 进行验证,反过来,为了验证源,必须创建一个测试管道,可以使用 PipelineManager 创建。因此,两个包之间存在循环依赖关系。

在静态类型语言中,我将创建一个 SourceValidator 将依赖的接口,并在管道包中实现它并使用依赖注入容器将特定实例注入 SourceValidator

但据我所知,这不是使用依赖注入容器的pythonic方式,所以请有人帮助理解处理这个问题的pythonic方式是什么?

0 投票
2 回答
55 浏览

c# - 即使类不拥有这些依赖项,但在方法中使用它们,您是否在构造函数中注入依赖项?

如果一个School类依赖于一个EmailSender类,您可能必须EmailSender通过它的构造函数注入它,该类具有通用接口,例如IMessagableorIMessageSender甚至IEmailSender,以便将来可以将其换成其他东西。

为此,您将在类中创建一个只读私有字段School

但是你是说School HAS-A MessageSender,但它肯定只是在它的一些方法中使用它?

0 投票
2 回答
2785 浏览

c# - 在 .Net Core 的 startup.cs 中实例化一个类对象

我正在尝试将接口和设置传递给一个类,同时在 .Net Core 项目的 startup.cs 中创建该类的实例。我正在使用下面的代码来做到这一点。我在 Student 类的构造函数中编写了一些代码,但是在启动应用程序时,构造函数中的代码/逻辑不起作用。没有错误,但调试指针没有命中 Student 类的构造函数。

如果我使用下面的代码,那么 Student 构造函数中的代码工作正常。

但是我需要在构造函数中传递服务接口才能在启动项目时做一些工作。谁能帮我解决我在这里缺少的东西?

0 投票
2 回答
144 浏览

java - 依赖倒置设计选择题

我目前正在阅读有关依赖倒置原则的其他优秀教程

https://www.baeldung.com/java-dependency-inversion-principle

尽管思考了相当长的时间,但有些东西我无法解释

DIP 定义的相关部分:“高级模块不应该依赖于低级模块。两者都应该依赖于抽象。”

在第 3.1 点“设计选择和 DIP”中,作者通过一个示例介绍了原理,其中一个StringProcessor类使用 aStringReader和一个StringWriter组件,并使用接口/类和包提供多种设计选择。我的问题是选择 2

StringReader并且StringWriter是与实现一起放置在同一包中的接口。StringProcessor现在依赖于抽象,但低级组件不依赖。我们还没有实现依赖关系的反转”

StringProcessor是依赖于“抽象”即接口的“高级组件”,从而从一侧实现DIP定义,这一点很清楚。现在给出在第一句中提到的文章“实现”中使用的术语,例如 a和一个类将是这里的“低级组件”,而我只是无法理解它们如何不依赖于“抽象” "即在他们实现的接口上,不管包含的包StringReaderStringWriterConcreteStringReaderConcreteStringWriter

显然,从代码组织的角度来看,将实现与其接口放在同一个包中可能不是最好的,但是这如何违反上面的逐字 DIP 定义取决于抽象目前超出我的理解

也许对该主题有更深入理论知识的人可以在这里帮助我

0 投票
1 回答
66 浏览

c# - 有没有办法使用 DI 模式集中对 C# 中的 DataContext 的访问?

这是我到目前为止得到的,但必须不断传递 DataClassesDataContext。我想知道是否有更好的更集中的方式来使用 DataClassesDataContext 并在每次使用数据上下文时填充连接字符串......提前感谢所有帮助

// 并在界面上使用这样的代码

0 投票
0 回答
44 浏览

dependencies - 依赖倒置 (DI) 中短语“应该依赖于抽象”的解释

我一直不太明白这句话的第二部分......

'高级模块不应该依赖于低级模块。两者都应该依赖于抽象(例如,接口) '

如果我改变...

至...

我们会说我已经成功地反转了依赖关系,因为现在控制台代码无法破坏高级模块(它在包装器中)。

这种情况下的抽象是接口'Lower',但控制台代码不依赖于'Lower',对吗?这取决于什么。这只是“代码”。

我想我真正的问题是在这种情况下究竟是什么表示“依赖”?

0 投票
2 回答
107 浏览

java - 如何在 PostConstruct 时在 Spring 中自动装配此依赖项

@PostConstruct在弹簧托管代码的块内有以下代码。

现在我不想做 aboggle = new BoggleFeature(sdkBuilder.build());并将其作为 bean 并将其作为 deopendency 注入。我怎样才能做到这一点。