问题标签 [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 回答
125 浏览

reflection - 从 silverlight 模块和加载模块中动态提取接口

在一些 winforms / webforms 应用程序中,我编写了一个模块,在应用程序启动时,使用反射检查 BIN 文件夹中的所有程序集,提取它们实现的所有公共类和接口并写入存储库。这允许我稍后在运行时根据它们实现和使用的接口加载模块。

我需要知道我是否/如何才能为 Silverlight 完成此任务。有没有办法检查所有 XAP 并提取所有模块及其元数据?并且以后能够动态加载我需要的组件所在的模块,然后从中加载组件。

谢谢

0 投票
2 回答
11456 浏览

c# - IDependencyResolver 是反模式吗?

我正在为旧版 ASP.NET 应用程序设计一些架构更改。我对一些模仿 ASP.NET MVC 的 IDependencyResolver 的依赖关系解析类进行了原型设计。我不会发布,因为它几乎是相同的界面,但使用其他自然语言。

我发现它可能被认为是服务位置,这反过来通常(在某些情况下不完全)被谴责以支持依赖注入。然而,我找不到任何反对使用 ASP.NET MVC 的依赖解析实现的建议。

ASP.NET MVC 的 IDependencyResolver 是否被视为反模式?这是一件坏事吗?

0 投票
1 回答
533 浏览

unit-testing - 在我的测试中绑定 IDatabaseInitializer<> 以测试我的数据上下文初始化程序(EntityFramework 4.1 aka EF4 Code First)

我正在尝试注入我的数据库初始化程序,以便我可以在单元测试中使用测试数据初始化程序并在生产中使用真实的初始化程序。

这是我的 ninject 模块。

如您所见,只定义了一个绑定;但是,当我运行测试时,它会出现以下异常:

我有一个基本的测试装置,我在其中实例化内核并将其传递给公共服务定位器:

我是 ninject 的新手,所以我不确定我是否正确设置了它。

非常欢迎任何有关如何解决此问题的帮助。

干杯

0 投票
5 回答
11357 浏览

design-patterns - 服务定位器模式与抽象工厂模式有什么不同吗?

乍一看,服务定位器模式在我看来与抽象工厂模式相同。它们似乎都有相同的用途(您查询它们以接收抽象服务的实例),并且在我阅读依赖注入时都提到了它们。

然而,我看到服务定位器模式被描述为一个糟糕的想法,但至少在一个主要的依赖注入框架中看到了对抽象工厂模式的直接支持。

如果它们不一样,有什么区别?

0 投票
1 回答
631 浏览

.net - 使用 Ninject WCF 扩展的无服务定位器架构

我终于对 Ninject 如何处理 DI 有了一些了解,但遇到了以下问题:

假设我们有一个将两个 WCF ServiceHost 对象作为构造函数参数的类:

起初我只有一个 ServiceHost 依赖项,所以我很容易处理这样的绑定:

在这种情况下,我可以通过使用单例对象初始化ActivitySinkServer来解决它的ServiceHost依赖关系。NinjectServiceHost

现在,我有两个 ServiceHost 依赖项,我怎样才能告诉 Ninject 在哪个构造函数参数处提供哪个,仍然让我的内部代码 Ninject 不知道。(我知道我可以使用手册中的 Ninject 属性和其他内容)。

更新:

我继续使用

显式指定目标构造函数变量名。看不出有什么害处。但是,如果有人有更优雅和面向对象的方法 - 欢迎您回答。

0 投票
1 回答
2405 浏览

c# - .NET MVC3 服务定位器/依赖解析器问题与 Ninject

我有一个我一直在玩/学习的标准 .NET MVC3 存储库模式项目。这是相当标准的结构。

  • 存储库项目(具有下面提到的缓存基础设施)
  • 领域模型项目
  • 服务层项目
  • MVC 演示项目

我遇到了一个场景,我需要注入一个只有一个静态构造函数的类的私有成员,这让我对构造函数注入不走运。

有问题的类是使用我刚刚完成的 AppFabric 缓存实现的包装器。(对于那些如此倾向的人,我的实现基于 https://github.com/geersch/AppFabric

基本上我有:

  • 接口 ICacheProvider
  • 类 DefaultCacheProvider : ICacheProvider
  • 静态类缓存(利用我注入的任何实现)

静态类缓存是我想注入解析为 DefaultCacheProvider 的 ICacheProvider 的地方。

根据我所阅读的内容,这似乎是 ServiceLocator 的一个场景,但我已经看到了一些非常强烈的意见(反模式等),而且我对它的熟悉程度很低,所以我不确定可行的实施。

我在 StackOverflow 上看到了将 Cache 类设计为标准类并在 SingletonScope 中注入 ICacheProvider 的建议

但我个人更喜欢静态包装器以方便使用。

是 ServiceLocator 设置到这里的方式还是有其他明显的我不知道的东西?如果 ServiceLocator 是要走的路,是否可以与 Ninject 搭配使用?我知道 Ninject 现在具有服务定位器功能,但不确定如何实现。

感谢您提供任何信息。

0 投票
1 回答
224 浏览

php - 使用 Service Locator 将容器实例提供给 Service 是错误的吗?

我正在使用服务层,然后,我有很多服务,例如:

  • 用户服务
  • 文章服务
  • 评论服务
  • 授权服务

有时我需要使用另一个服务中的服务。

目前,我正在使用 sfServiceContainer 进行依赖注入,并在我的一些服务中注入我的 Doctrine 2 实体管理器,但是,我正在考虑切换并注入容器实例以便能够获取任何服务和 EntityManager。

但我被困住了,我不确定这是一个好主意。

0 投票
1 回答
443 浏览

gwt - 使用 ServiceLocator 时,Locator 方法在哪里?

如果我使用带有 a 的单独服务类ServiceLocator,我还需要在Locator某处定义方法吗?:

他们上服务课吗?

0 投票
1 回答
1744 浏览

java - Java - 使用注释自动实现服务定位器模式

Spring 几乎提供了我想要的东西。在 Spring 中,您可以简单地使用 @Component 注释类,然后使用“context:component-scan”让 Spring 自动搜索组件。然后稍后您可以创建应用程序上下文并调用 getBean(String, Class) 以获取任何接口或类的实现。

例如,如果我有一个接口“Mp3Service”并且我想注册一个名为“InternetMp3Service”的新实现,我所要做的就是将@Component 注解添加到类定义中。

对我来说,唯一的问题是我想在一个小程序中使用所有这些,所以我得到了一个 java.lang.RuntimePermission 异常,用于权限“accessDeclaredMembers”。我不想签署小程序,也不想为 bean 创建显式配置。

我正在寻找的是一个框架/库,它将在编译/构建时通过注释并创建一个可以在运行时读取的配置。

例如,如果这里没有出现任何问题并且我认为值得麻烦,我可以编写自己的程序来抛出所有类并查找某个注释,然后创建一个 spring xml 配置文件。但是,我认为现在有人可能已经提供了一些东西。

谢谢。

0 投票
1 回答
1591 浏览

java - 寻求实现服务定位器模式的帮助

我有一个正在构建的小型 Web 应用程序。主要是为了提高我的单元测试能力(并进一步解耦我的代码),我正在实现一个服务定位器模式来查找某些依赖项的具体实现。我对 Service Locator 单例类本身非常满意,但我很好奇将它放在哪里以及如何加载它。单例本质上管理接口的哈希图 -> 具体实现。

我的工作区中有几个项目:

1) 一个表示层项目,其中包含 servlet 代码和表示层处理。(使用下面的 2 和 3)

2)一个数据访问层项目,其中包含访问数据库等的代码(使用下面的 3)

3) 一个包含两层使用的各种数据模型的通用项目。(没有其他项目参考)

由于服务定位器是为上述项目 1 和 2 中的类的实现提供服务,我想知道最好把它放在哪里?

我坚持的另一个问题是如何最好地使用默认实现加载它。一种选择是将所有默认实现放入单例服务定位器类的构造函数中。例如:

另一种选择是拥有一个单独的类,其职责是使用默认实现加载 ServiceLocator。但接下来的问题是如何调用它,以便在任何其他类之前加载默认实现。

所以我想我的两个问题是:

1) ServiceLocator 最适合哪个项目?

2) 您推荐哪些解决方案来加载具有默认实现的类?

谢谢