【发布时间】:2011-01-22 16:18:33
【问题描述】:
我知道通常注入器应该在所有应用程序中只使用一次(在启动时)。但我有以下用例。我为 Executor 注入任务实现,然后在该任务中我有依赖项(比如说FileHandler),每次都必须实例化。我知道方法是注入提供程序(比如说FileHandlerProvider),每次请求时都会返回新实例。问题是FileHandler 有很多自己的依赖项(比如说Parser、OutputPrinter...)。现在那些也每次都需要新实例(因为实现可能有一些状态,例如计数器,并且在下一个线程运行时重用相同的实例将是一个问题)。问题是在注入提供程序后,相同的提供程序实例被重用,所以新的FileHandler 总是用相同的Parser 和OuputPrinter 创建。解决方案可能是再次注入ParserProvider 和OutputPrinterProvider,而不是FileHandlerProvider 中的Parser 和OuputPrinter,但这是不对的,它很快就会变得太复杂,因为有更多的依赖关系。我现在看到的唯一简单的解决方案可能是在 FileHandlerProvider 中使用 Injector,这将返回新实例 FileHandler(以及新的依赖项实例)。或者在这种情况下可能还有另一种更优雅的解决方案?
【问题讨论】:
标签: task guice provider executor