我在这里对Dagger 1提出了同样的问题。既然Dagger 2 ObjectGraph.inject
不再存在,我将如何做类似的事情。
这个问题可以概括为:
如果必须由其他框架创建对象,如何进行成员注入?(在本例中为Servlet容器)。
我一直在尝试回答同样的问题。我认为我已经接近其“应该”如何理想地工作了,但是我只是绕过GitHub项目,并试图根据那里的信息来弄清楚它,因为Dagger 2的许多文档仍在(截至本周为止)。
我下面的示例代码实际上是针对Android Activity的,但我相信这种相同的方法也应适用于您要询问的servlet。
将MembersInjector <...>添加到您的@Component接口;例如,在下面的组件中,我为MainActivity类添加了一个:
package ...;
import javax.inject.Singleton;
import dagger.Component;
import dagger.MembersInjector;
@Singleton
@Component(modules = { PlaygroundModule.class })
public interface MainComponent {
Wizard createWizard();
MembersInjector<MainActivity> mainActivityInjector();
}
然后在要创建成员注入的类中,在对象创建之后但在需要使用注入的成员之前的适当位置,需要创建组件并使用成员注入:
package ...;
// other imports
import javax.inject.Inject;
import dagger.MembersInjector;
public class MainActivity extends ActionBarActivity {
@Inject
Wizard wizard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MainComponent c = DaggerMainComponent.create();
c.mainActivityInjector().injectMembers(this);
// other code...
}
}
我尚不清楚的一件事是这种在应该注入的对象内部创建组件的模式是否正确。感觉不太正确,但是,它仍然非常灵活,因为您仅紧密绑定到组件而不是模块。因此,也许这是正确的方法,但也许有些偏离。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句