java – 实例化每个范围/组单例 – 陷入Guice依赖地狱
这个问题是Using guice for a framework with injected classes,proper way to initialize?的延续,我试图实现,并尝试了其他方法来解决这个问题,但到目前为止还没有任何工作. 主要问题是这个.我有一个InterfaceA和InterfaceB暴露在API的不同部分.有两个类实现这两个接口,TestClass和RealClass,所以根据我是在测试还是做其他事情,我可以做到以下几点:
或者,用于生产:
我有两个使用这些类的要求: >我需要将相同的TestClass或RealClass实例绑定到InterfaceA和InterfaceB的所有注入;所以,就像单身模式一样,除了: 默认的无范围方法会导致为每个接口注入创建多个RealClass / TestClass实例.我不希望这样,所以我尝试使用范围,子注入器和其他方法来实现它.没有任何效果: > Child injector approach:我创建了一个新的注入器,并尝试将TestClass或RealClass绑定到该注入器中的单例实例.问题是,是否正在使用TestClass或RealClass在父注入器和since it’s a singleton,it’s already instantiated中配置(除非在Stage.DEVELOPMENT中).例如,在父注入器中无法将InterfaceA绑定到TestClass,然后将其重新绑定为子注入器中的单例.
因为它似乎坚持WhateverScope一直可用,而不仅仅是儿童注射器. 所有这些问题似乎都是由于我需要能够配置是否在父级中使用TestClass或RealClass,然后能够稍后将它们实例化为特定的一组对象的单例.我正在把头发拉出来完成如何完成! 顺便说一句,Guice范围的文档很糟糕,几乎无法理解. This article是唯一让我到任何地方的人: 最佳答案
在发布后不到一个小时就有点突破的道歉.
我似乎能够通过稍微滥用http://code.google.com/p/google-guice/wiki/CustomScopes提供的线程局部范围实现来解决这个问题.在不使用子注入器的情况下解决此问题似乎是一种有点干净的方法.不过,我不确定它是否“合适”.我还是会接受其他答案. 这就是我做的.首先,我创建一个范围实例,将其绑定到适当的注释,并使其在注入器中可用:
然后,正如文档所说,我需要为范围内播种的每种类型的键绑定一个假提供者:
我可能还有一些其他可范围的对象,我想在每个范围内区分,所以我也绑定它们.这些是上面的TestClass和RealClass.可能还有使用@ExperimentScoped注释的SomeScopedClass:
最后,我可以使用范围从不同的线程并行创建不同的相互依赖的对象集.每个线程都可以执行类似下面的操作,即使它们使用相同的注入器:
在我的情况下,我可以完全放弃范围,因为我不关心在正确连接后跟踪范围内的对象集.但是如果我想稍后回到这个范围并注入更多的对象,它可能无法工作. 希望这有助于某人. Guice范围文档太糟糕了! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |