依赖注入:如何在不在构造函数中传递注入表的情况下获取newable?

时间:2014-05-10 21:02:52

标签: design-patterns dependency-injection

让我们说我有一个注入A的课程B。向B注入CC注入D

D有一个方法doSomething,可以接收新的NAClassA需要存储在NAClass中的一些信息。我正在寻找将此信息传递给A的正确方法,而无需将其传递给不需要它的CB

一种方法是在工厂方法中构建A时传递此信息,但在这种情况下,我打破了依赖注入规则,其中newables不应传递给构造函数中的注入。

解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我在这种情况下使用的模式是创建另一个名为Context的注射器,在您的情况下为NAContext。它有一个setter和一个NA的getter。在使用D进行任何操作之前,NA会使用A调用setter,而A会调用getter。当然你必须注意并发性。

具体示例:在Java Web应用程序中,Controller可以访问当前的RequestController还有一堆组件注入其中,并且组件注入了它们,依此类推。某些组件需要知道用户是否已登录,这取决于当前的Request。因此,使用AuthenticationContext创建ThreadLocal<Request>,将其注入Controller和所有关心身份验证的组件,并在与其他组件执行任何操作之前让控制器调用authenticationContext.setRequest(request)(和setRequest(null)当它完成以防止泄漏到该线程处理的下一个请求时。)