让我们说我有一个注入A
的课程B
。向B
注入C
,C
注入D
。
D
有一个方法doSomething
,可以接收新的NAClass
。 A
需要存储在NAClass
中的一些信息。我正在寻找将此信息传递给A
的正确方法,而无需将其传递给不需要它的C
和B
。
一种方法是在工厂方法中构建A
时传递此信息,但在这种情况下,我打破了依赖注入规则,其中newables不应传递给构造函数中的注入。
解决这个问题的正确方法是什么?
答案 0 :(得分:0)
我在这种情况下使用的模式是创建另一个名为Context
的注射器,在您的情况下为NAContext
。它有一个setter和一个NA
的getter。在使用D
进行任何操作之前,NA
会使用A
调用setter,而A
会调用getter。当然你必须注意并发性。
具体示例:在Java Web应用程序中,Controller
可以访问当前的Request
。 Controller
还有一堆组件注入其中,并且组件注入了它们,依此类推。某些组件需要知道用户是否已登录,这取决于当前的Request
。因此,使用AuthenticationContext
创建ThreadLocal<Request>
,将其注入Controller
和所有关心身份验证的组件,并在与其他组件执行任何操作之前让控制器调用authenticationContext.setRequest(request)
(和setRequest(null)
当它完成以防止泄漏到该线程处理的下一个请求时。)