Tag: 服务定位器

Service Locator模式与Abstract Factory模式有什么不同?

乍看之下,服务定位器模式看起来与抽象工厂模式相同。 他们似乎有相同的用途(你查询他们接收抽象服务的实例),他们都已经提到,当我读到dependency injection。 但是, 我已经将Service Locator模式描述为一个糟糕的主意 ,但是至less在一个主要的Dependency Injection框架中直接支持Abstract Factory模式 。 如果他们不一样,有什么区别?

为什么MVC4使用服务定位器反模式?

在阅读Mark Seemann的“Dependency Injection in .NET”之后 ,我远离了服务定位器 ,这是一种反模式。 在阅读MVC 4上的发行说明之后,我看到: 通过DependencyResolver改进控制反转(IoC):Web API现在使用由MVC的依赖parsing器实现的服务定位器模式来获取许多不同工具的实例。 因此,我留下了好奇和困惑,为什么微软会在2012年使用服务定位器。

ServiceLocator是一种反模式吗?

最近我读过Mark Seemann关于Service Locator反模式的文章 。 作者指出了ServiceLocator是反模式的两个主要原因: API使用问题 (我非常好) 当类使用Service定位器时,很难看到它的依赖关系,因为在大多数情况下,类只有一个PARAMETERLESS构造函数。 与ServiceLocator相比,DI方法通过构造函数的参数显式地公开依赖关系,因此IntelliSense中很容易看到依赖关系。 维护问题 (困惑我) 考虑下面的expample 我们有一个使用服务定位器方法的“MyType”类: public class MyType { public void MyMethod() { var dep1 = Locator.Resolve<IDep1>(); dep1.DoSomething(); } } 现在我们想添加另一个依赖类到'MyType' public class MyType { public void MyMethod() { var dep1 = Locator.Resolve<IDep1>(); dep1.DoSomething(); // new dependency var dep2 = Locator.Resolve<IDep2>(); dep2.DoSomething(); } } 这是我误解的起点。 作者说: 要告诉你是否正在引入一个突破性的变化就变得很难了。 […]

dependency injection和服务定位器模式有什么区别?

这两种模式似乎都是控制反转原理的实现。 也就是说,一个对象不应该知道如何构build它的依赖关系。 dependency injection(DI)似乎使用构造函数或setter来“注入”它的依赖关系。 使用构造函数注入的示例: //Foo Needs an IBar public class Foo { private IBar bar; public Foo(IBar bar) { this.bar = bar; } //… } 服务定位器似乎使用一个“容器”,它连接它的依赖关系,并给出它的条形码。 使用服务定位器的示例: //Foo Needs an IBar public class Foo { private IBar bar; public Foo() { this.bar = Container.Get<IBar>(); } //… } 因为我们的依赖关系本身就是对象,所以这些依赖关系具有依赖关系,依赖关系更多,依此类推。 因此,控制容器的倒置(或称DI容器)诞生了。 例如:温莎城堡,Ninject,结构图,spring等) 但IOC / DI容器看起来完全像服务定位器。 称之为DI容器是一个坏名字? […]