问题标签 [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.
silverlight - MVVM:如何将参数传递给 ViewModel 的构造函数
我正在使用 L. Bugnion 的 MVVM Light Framework。
将客户 ID 等参数传递给 ViewModel 的构造函数的推荐方法有哪些?
编辑:每个 ViewModel 我需要的参数不是跨模型共享的。它是每个视图模型实例所独有的。
dependency-injection - ASP.NET MVC 3 RC 中的 MvcServiceLocator 在哪里?
我正在尝试将 Ninject 与我的 ASP.NET MVC 3 RC 应用程序结合起来。
从我找到的教程中,我应该通过设置 ServiceLocator
在Global.asax
文件中,但我似乎无法在 ASP.NET MVC 3 RC 中找到它。这是否已更改为其他内容?
dependency-injection - 如何通过配置文件进行 IServiceLocator 构造函数注入?
如何将 IServiceLocator 注入我的类构造函数?
当我尝试通过我的配置执行此操作时,如上所述,我得到了一个无法创建 RequestHandlersFactory 类的异常,因为统一找不到带有serviceLocator和assemblyName的构造函数。
我有两个接口
和两个班级:
现在我想创建统一配置文件:
我的配置代码:
unit-testing - Unity Service Locator:是否有提供的方法来测试配置是否有效?
在 StructureMap 中有一种方法可以测试您的配置是否有效,调用 StructureMap.ObjectFactory:
在 Unity 中是否有类似的功能?
dependency-injection - IoC 容器冲突
在我当前的项目中,我使用 SolrNet 和 OAuth.Net。两个库都使用 Common Service Locator。SolrNet 将自定义 IoC 容器实现设置为定位器提供程序。OAuth.Net 的定位器提供程序在我的代码中设置(目前我使用的是示例中使用的 Windsor)。问题从这里开始,因为
实际上是替换 ServiceLocator.Current 静态属性值。
有什么建议吗?在这种情况下,最佳实践是什么?
在此先感谢, Hristo
dependency-injection - 构造函数注入以及何时使用服务定位器
我正在努力理解 StructureMap 的部分用法。特别是,在文档中声明了一种常见的反模式,即仅使用 StructureMap 作为服务定位器而不是构造函数注入(直接来自 Structuremap 文档的代码示例):
代替:
这对于一个非常短的对象图来说很好,但是当处理很多层次的对象时,这是否意味着您应该从顶部向下传递更深的对象所需的所有依赖项?当然,这会破坏封装并暴露太多关于更深层对象实现的信息。
假设我正在使用 Active Record 模式,因此我的记录需要访问数据存储库才能保存和加载自身。如果此记录加载到一个对象中,该对象是否调用 ObjectFactory.CreateInstance() 并将其传递给活动记录的构造函数?如果该对象在另一个对象内部怎么办。它是否将 IRepository 作为自己的参数从更远的地方开始?这将向父对象公开我们此时正在访问数据存储库的事实,外部对象可能不应该知道这一点。
任何想法将不胜感激。
西蒙
编辑: 意见似乎是注入应该从顶层开始。ActiveRecord 将被注入到 ThingThatNeedsRecord 中,而 ThingThatNeedsRecord 又被注入到 OuterClass 中。这样做的问题是,如果 ActiveRecord 需要使用运行时参数(例如要检索的记录的 id)进行实例化。如果我在顶部将 ActiveRecord 注入到 ThingThatNeedsRecord 中,我必须以某种方式弄清楚此时需要什么 id(它将顶层暴露给它不应该实现的实现),或者我必须有一个部分构造的 ActiveRecord并稍后设置 Id。如果我需要 N 条记录并且直到在 ThingThatNeedsRecord 中执行逻辑才会知道,这会变得更加复杂。
dependency-injection - 使用 Ninject、MVC 3 和使用服务定位器模式的依赖注入
自从我阅读了关于另一个 stackoverflow 问题的答案(现在我不知道确切的问题)的答案以来,一直困扰着我的事情是,用户说“如果您正在调用服务定位器,那么您做错了。 ”
这是一个声望很高的人(我想有几十万)所以我倾向于认为这个人可能知道他们在说什么。自从我第一次开始了解 DI 以及它与单元测试的关系以及不相关的情况以来,我一直在我的项目中使用 DI。这是我现在相当舒服的事情,我想我知道我在做什么。
但是,有很多地方我一直在使用服务定位器来解决项目中的依赖关系。一旦主要示例来自我的 ModelBinder 实现。
典型模型粘合剂的示例。
不是真正的实现——只是一个简单的例子
由于第一次请求Binder 时 ModelBinder 实现需要一个新实例,因此不可能在此特定实现的构造函数上使用依赖注入。
我的很多课都是这样。另一个例子是缓存过期进程,只要缓存对象在我的网站中过期,它就会运行一个方法。我运行了一堆数据库调用,什么都没有。我也在使用服务定位器来获取所需的依赖项。
我最近遇到的另一个问题(我在这里发布了一个问题)是我所有的控制器都需要一个 IDataContext 的实例,我使用 DI 来处理它——但是一个操作方法需要一个不同的 IDataContext 实例。幸运的是,Ninject 带来了一个命名依赖项。然而,这感觉像是一个杂牌,而不是一个真正的解决方案。
我认为我至少对关注点分离的概念理解得相当好,但我对依赖注入和服务定位器模式的理解似乎存在根本性的错误——我不知道那是什么。
我目前理解它的方式 - 这也可能是错误的 - 是,至少在 MVC 中,ControllerFactory 为 Controller 查找构造函数并调用 Service Locator 本身以获取所需的依赖项,然后将它们传递进去。但是,我可以理解,不是所有的类和什么都没有工厂来创建它们。所以在我看来,一些服务定位器模式是可以接受的......但是......
- 什么时候不能接受?
- 当我应该重新考虑如何使用服务定位器模式时,我应该注意哪种模式?
- 我的 ModelBinder 实现错了吗?如果是这样,我需要学习什么来解决它?
- 在另一个与该用户类似的问题中,Mark Seemann推荐了一个抽象工厂——这有什么关系?
我想就是这样 - 我真的想不出任何其他问题来帮助我理解,但非常感谢任何额外的信息。
我知道 DI 可能不是所有问题的答案,而且我在实现它的方式上可能有些过火,但是,它似乎以我期望的方式工作,与单元测试一起工作,而不是什么。
我不是在寻找代码来修复我的示例实现——我在寻找学习,寻找解释来修复我有缺陷的理解。
我希望 stackoverflow.com 能够保存草稿问题。我也希望回答这个问题的人在回答这个问题时获得适当的声誉,因为我认为我要求很多。提前致谢。
.net - Unity 'GetAllInstances' 不返回任何内容
我正在使用统一来管理我的应用服务器上的服务,但由于某种原因,我无法让方法“GetAllInstances”工作。奇怪的是,相同类型的“GetInstance”似乎工作正常!
这是配置:
这个想法是,当服务器启动时,我需要能够获取所有已配置的 IService 实例来初始化它们。
正如我所说,单曲有效,但 get all 没有任何回报。即使我从配置中删除了 IAtomCommandService 映射并且只拥有 IService 它仍然无法正常工作。关于我在哪里出错的任何想法?
exception - SolrNet - 字典中不存在给定的键
我将 SolrNet 与 vb.net 2.0 一起使用,但似乎无法实例化 solr。
Dim solr As IsolrOperations(Of PMWProperty) = ServiceLocator.Current.GetInstance(Of PMWProperty)()
抛出异常:
[KeyNotFoundException: 给定的键不在字典中。] System.ThrowHelper.ThrowKeyNotFoundException() +28 System.Collections.Generic.Dictionary`2.get_Item(TKey key) +7456108 SolrNet.Utils.Container.DoGetInstance(Type serviceType , String key) +22 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) +47
[ActivationException:尝试获取 PMWProperty 类型的实例时发生激活错误,键“”] Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(Type serviceType, String key) +104 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance() +5
我有一个 PMWProperty 类,其中只有几个与我的 solr 模式匹配的字段。我可以很好地通过 solr url 运行查询(localhost:8983/solr),但不能让它在我的代码中工作。
它在看什么键?异常好像说key是"",但是应该是什么?为什么我需要钥匙?
performance - @EJB 注入与查找 - 性能问题
我有一个与使用 @EJB 注释时可能的性能问题有关的问题。想象以下场景
有一个 bean 与其他 bean 有许多依赖关系。根据 EJB 规范,如果我想将 MyBean1Remote 注入到其他某个 bean,容器必须从其池中获取所有必需的依赖项,然后将其注入 MyBean1Remote,然后注入对 MyBean1Remote 存根的引用。
因此在以下场景中容器需要保留 20 个 ejb(myBean1 及其 19 个依赖项)
假设在大多数情况下,我们将为 myBean1 的每个业务方法仅使用一个依赖项。因此,每次我们想要注入该 bean 时,我们都会强制容器保留许多不必要的 EJB。让我们还假设我们正在对远程 bean 进行操作,因此容器可能还需要在注入依赖 bean 之前执行一些负载平衡算法。
问题:
在集群环境中运行时,这不会导致不必要的资源预留和更多的性能问题吗?
也许好的旧 ServiceLocator 可能是更好的解决方案,因为使用这种方法,我们会在真正需要时要求特定的 EJB?