366得票16回答
依赖注入和服务定位器模式有什么区别?

这两种模式似乎都是控制反转原则的一种实现方式。也就是说,一个对象不应该知道如何构造它的依赖。 依赖注入(DI)似乎使用构造函数或设置器来“注入”它的依赖关系。 Constructor Injection的示例://Foo Needs an IBar public class Foo { ...

165得票10回答
服务定位器(ServiceLocator)是一种反模式吗?

最近我读了Mark Seemann写的文章,讲述了Service Locator反模式的两个主要原因: API使用问题(我对此完全没有问题): 当类使用Service Locator时,很难看到它的依赖关系,因为在大多数情况下,该类只有一个“无参数构造函数”。相比之下,使用DI方法通过构造函...

57得票7回答
从静态工厂类访问ASP.NET Core DI容器

我创建了一个基于ASP.NET Core MVC/WebApi的网站,其中包含一个基于James Still博客文章《使用RabbitMQ进行实时发布/订阅消息》的RabbitMQ订阅者。 在他的文章中,他使用一个静态类来启动队列订阅者并定义排队事件的事件处理程序。然后,这个静态方法通过一个...

50得票4回答
供应商 vs Get_it

在寻找Flutter依赖注入解决方案时,我发现了两个很棒的库:provider和get_it。 就我所看到的,provider需要更多的样板代码,但它非常适合Flutter,允许Consumer在注入的值改变时重新构建部件树的一部分。 另一方面,get_it更直观易用,并且不依赖于Flutte...

47得票2回答
为什么MVC4使用服务定位器反模式?

阅读了Mark Seemann的《.NET中的依赖注入》之后,我远离了反模式服务定位器。 阅读了MVC 4版本发布说明后,我看到: 通过DependencyResolver改进了控制反转(IoC): Web API现在使用MVC的依赖解析器实现的服务定位器模式来获取许多不同设施的实例。 ...

44得票11回答
依赖注入与服务定位

我目前在权衡使用 DI 和 SL 的优缺点。然而,我发现自己陷入了以下两难困境:我应该仅将 IoC 容器注入到每个类中,然后对所有内容使用 SL。 DI 两难困境: 有些依赖项,例如 Log4Net 对于 DI 来说并不适用。我称这些为元依赖项,并认为它们对调用代码应该是不透明的。我的理由...

43得票5回答
服务定位器模式和抽象工厂模式有什么不同?

一开始看,服务定位器模式对我来说看起来与抽象工厂模式相同。它们似乎都有相同的用途(您查询它们以接收抽象服务的实例),并且在我阅读有关依赖注入的文章时都被提到。 但是,我看到服务定位器模式被描述为一个糟糕的想法, 但是至少有一个主要的依赖注入框架直接支持抽象工厂模式。 如果它们不同,那么它们...

40得票9回答
使用哪个模式进行日志记录?依赖注入还是服务定位器?

考虑这种情况。我有一些业务逻辑,偶尔需要写入日志。interface ILogger { void Log(string stuff); } interface IDependency { string GetInfo(); } class MyBusinessObject...

39得票4回答
何时使用通用服务定位器(Common Service Locator)?

我一直在研究使用通用服务定位器作为抽象我的IoC容器的一种方式,但我注意到有人强烈反对这种方法。 人们推荐永远不要使用它吗?总是使用它?还是有时使用它? 如果有时使用它,那么在什么情况下会使用它,在什么情况下不会使用它。

20得票3回答
具有依赖关系的可测试控制器

如何解决可测试的控制器依赖性问题? 工作原理:URI被路由到一个控制器,该控制器可能具有执行特定任务所需的依赖关系。<?php require 'vendor/autoload.php'; /* * Registry * Singleton * Tight coupling ...