问题标签 [service-locator]

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 投票
1 回答
266 浏览

.net - ServiceLocator 的消费者是否应该调用 ServiceLocator.Current?

我正在尝试重构我的代码以使用Common Service Locator。我有一个由其他一些组件使用的共享库。

我不明白的是:这些组件是否应该调用 ServiceLocator.Current 并解析它们的类型?在这种情况下,如何确保 ServiceLocator.Current 已实际设置?我应该创建自己的“MyServiceLocator”并添加一个静态构造函数吗?(这似乎违背了标准化抽象的目的)

或者我的共享库是否应该有一个将所有可解析类型公开为公共属性的类,从而将 ServiceLocator 完全保留在共享库的内部?(这意味着在抽象之上有一个抽象)?

问题是组件不是通过 DI 创建的,应该调用 Container 来获取他们需要的任何东西。

0 投票
3 回答
481 浏览

dependency-injection - For a simple web application, what service locator library you prefer to use?

For a simple application that use asp.net mvc 3 and .net-4, what service locator application is preferred, with performance concern in mind?

0 投票
1 回答
771 浏览

wpf - WPF DI 服务定位器

所以我正在寻找一些说明如何从我的应用程序中删除服务定位器。

我有一个 ViewManagerService 负责了解哪个视图处于活动状态,哪些视图处于打开状态并创建一个新视图。

目前,我的 ViewModel 通过构造函数注入将 IViewManagerService 注入其中。这些 ViewModel 公开 ICommand,当被调用时可以调用

ViewManagerService 然后使用一个服务定位器来查找并实例化一个带有键“MyCoolView”的新视图。使用密钥字符串的原因是我可以将 View 与 ViewModel 分离。我想保持 ViewManagerService 足够通用,以便我可以将它用于其他应用程序,所以我不希望它依赖于特定的 IAbstractFactory 接口。

任何提示/建议?

0 投票
2 回答
597 浏览

asp.net-mvc - HtmlHelper 使用 ServiceLocator 构建下拉列表:代码异味?

鉴于以下代码(高度简化以直截了当),必须遵循模式是否是一种代码味道?

型号:

编辑产品的视图:

类别的 EditorTemplate

HtmlHelper 方法

作为参考,helper 方法的真正实现需要一些 lambdas 来获取 DataTextField 和 DataValueField 名称、所选值等。

困扰我的一点是在 HtmlHelper 中使用服务定位器。我认为我的 Product 模型中应该有一个 AllCategories 属性,但是每次需要时都需要在控制器中填充它。

所以我认为我使用的解决方案更简单,因为辅助方法是通用的(modelbinder 也是通用的,这里不包括在内)。所以我只需要为需要 DropDownList 的每种类型创建一个 EditorTemplate。

有什么建议吗?

0 投票
2 回答
1305 浏览

objective-c - 如何跨多个项目在 Cocoa Touch 中实现服务定位器模式?

这是一个困扰我一段时间的问题。我对其中一些模式还是很陌生,所以如果我错误地使用了任何术语,你必须原谅我(并纠正我)。

我的方法论

我创建了一个游戏引擎。我的游戏引擎中的所有对象都使用控制反转来获取依赖关系。这些依赖项都实现了协议,并且从不直接在项目中访问,除了在引导阶段之外。为了得到这些对象,我有了服​​务定位器的概念。服务定位器的工作是定位符合特定协议的对象并将其返回。它很像一个工厂,但它也应该处理依赖关系。

为了向服务定位器提供服务,我有我所说的服务说明符。服务定位器知道项目中的所有服务说明符,并且当请求一个对象时,尝试从它们中的每一个中获取符合所提供协议的对象实例。然后将该对象返回给调用者。这个设置很酷的是服务说明符也知道服务定位器,所以如果它有任何依赖关系,它只会向服务定位器询问那些特定的依赖关系。

举个例子,我有一个名为 HighScoreManager 的对象。HighScoreManager 实现了 PHighScoreManager 协议。在任何时候,如果需要 PHighScoreManager 的实例,可以通过调用来检索它:

因此,控制反转。然而,大多数时候甚至没有必要这样做,因为大多数类都位于服务说明符中,如果需要 PHighScoreManager 作为依赖项,则通过服务定位器检索它。因此,我有一个很好的平面控制反转方法。

我的问题

因为我希望共享游戏引擎中的代码,所以我将其编译为静态库。这对其他一切都非常有用,但服务定位器似乎有点棘手。问题是一些服务会随着游戏的变化而变化。在我上面的例子中,一场比赛中的得分可能是时间,而在另一场比赛中可能是积分。因此,HighScoreManager 依赖于 PHighScoreCreator 的一个实例,它告诉它如何创建一个 PScore 对象。

为了向 HighScoreManager 提供 PHighScoreCreator,我需要为我的游戏提供服务说明符。我能想到的唯一方法是使用 Cocoa 版本的反射。在挖掘之后,我发现类可以通过 NSBundle 发现,但似乎没有办法获得当前的包。因此,如果我希望能够搜索我的服务说明符,我将不得不将我的游戏逻辑编译到它自己的包中,然后让引擎搜索这个包并加载它。为了做到这一点,我必须创建第三个项目来容纳引擎代码和游戏逻辑包,而实际上我只想拥有一个使用引擎静态库的游戏项目。

我真正的问题

所以毕竟,我的问题是

  1. 有没有更好的方法来做我想要在 Cocoa Touch 中完成的事情,或者
  2. 有没有办法从主包中发现符合我的服务说明符协议的类?

感谢您的帮助并花时间阅读问题。

-螺旋状

0 投票
3 回答
528 浏览

mvvm - MVVM 设置设计时服务?

我正在使用 MVVM 模式 + 一个简单的 ServiceLocator 实现,现在我的问题是当视图在设计时运行时我应该如何设置服务?

我试过了,但它似乎在 VS 2010 或某些东西上不起作用,我知道它在我的旧电脑上工作,但在我的新电脑上却不行。那么有人知道一个好的选择吗?

编辑:(代表 Merlyn Morgan-Graham)

好吧,我想做的是这个,我有我的观点,ViewModel 和服务现在不同的是,我有每个服务的 2 个实现,一个用于设计时,一个用于运行时。为了更好的解释看这里

0 投票
2 回答
2359 浏览

java - 来自 Swing 的 EJB 调用

我在 GF V3.01 服务器上有应用程序,在 EJB 容器中有远程方法。当我从远程摇摆应用程序调用远程方法时,需要很长时间才能执行。我阅读了有关 ServiceLocator 的信息,但找不到远程 Swing 应用程序的示例。有人请帮忙!给出一些想法来加速远程方法调用。

如果这不是有效的方法,我会创建此测试并发表一些评论

@Remote 公共接口 CountryManagerRemote 扩展 EJBHome {

}

/** CountryManagerRemote 实现 */

@Stateless 公共类 CountryManagerBean 实现 CountryManagerRemote {

}

/** 远程摇摆应用程序代码 */ public class ClientApp {

}

/** 远程 ejb 的 ServiceLocator */

公共类服务定位器{

}

0 投票
3 回答
332 浏览

c# - 如果它不*总是*创建 Foo 对象,那么将类称为 FooFactory 是错误的吗?

如果一个类并不总是创建 Foo 对象,那么将其称为 FooFactory 是错误的吗?例如,如果我有以下界面:

并按如下方式实现:

那么这个类可能会根据我的 IoC 容器的配置方式创建一个 Foo 。如果应该为真正的工厂保留“XxxFacotry”名称,我应该如何称呼我的接口和类?

显而易见的答案是 IFooProvider,但我真的想避免使用“XxxProvider”,因为它被过度使用,因此太模糊了。另一方面, IFooServiceLocator 太具体了。

非常感谢替代命名建议。

0 投票
2 回答
7202 浏览

unity-container - Unity ServiceLocator,在运行时注册类型

我有一个使用 Unity DI 和 EntLib 服务定位器的小工具包。当第三方应用程序尝试使用 EntLib 服务定位器时会出现此问题。看起来 EntLib 服务定位器是单例的,所以当第三方应用程序引导它的服务定位器时,它会清除我的服务定位器的配置。客户端以这种方式创建服务定位器:

它是这样使用的:

有没有办法管理两个 ServiceLocator 或者在运行时在服务定位器中注册额外的组件?

0 投票
1 回答
380 浏览

castle-windsor - 如何从 ServiceLocation 取回容器实例?

是否可以从 ServiceLocation 取回容器实例?我只看到解析类型实例的能力,而不是注册它们。