______ ______ ______ | | | | | | | APP1 |->| LIB |<-| APP2 | '------' '------' '------'
我目前使用这样的东西:
static <T> Utils.getInstanceOf (Class<T> type);
这只是一个包装:
injector.getInstance (Class<T> type);
但是,guice文件说:
When feasible,avoid using this method,in favor of having Guice
inject your dependencies ahead of time.
那么,为两个应用程序提供依赖注入的最佳方式是什么,而不必在Guice模块中手动绑定它们?
解决方法
So what’s the best way to provide dependency injection for the two
apps without having to manually bind them in a Guice module?
没有这样的方式.您完全接受Guice或者不使用它,并明确传递您的依赖项.那么,以这样的方式构造你的代码,所以你永远不会直接创建类依赖,而是通过构造函数传递它们,也可以称为“依赖注入”,但我确定这不是你的意思.如果你不想在你的应用程序中使用Guice,那么你将无法获得比getInstance()更好的东西,这是比较丑的,特别是因为你使用静态包装器.
理想情况下,您的库应该提供一个可以在应用程序中通过Guice.createInjector()安装的模块,或者另一方面,库应该提供一个Injector实例,您可以通过使用createChildInjector()和提供应用程序特定的模块.这种方法的轻微修改是将应用程序特定的模块传递到库,以便它们用于创建Injector.最近我已经编写了基于guice的API,而不是使用最后一种方法来支持任何类型的DI,而且它工作正常.
在servlet或泽西环境中使用Guice并不是很难.例如,后者与Guice具有开箱即用的集成(至少在1.x版本中). Guice servlet extension也很好,方便.只要试一下,看看自己.