我一直试图回答同样的问题.我认为我已经接近它应该如何理想地工作,但我只是围绕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();
}
Run Code Online (Sandbox Code Playgroud)
然后在您的类中,您希望成员注入,在对象创建后的适当位置,但在您需要使用注入的成员之前,您需要创建组件并使用成员注入:
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...
}
}
Run Code Online (Sandbox Code Playgroud)
我不清楚的一件事是这个在应该注入的对象内部创建组件的模式是否正确.它感觉不太对,但它仍然非常灵活,因为你只是紧密地绑定到组件而不是模块.所以也许这是正确的方法,但也许它有点偏.
| 归档时间: |
|
| 查看次数: |
1575 次 |
| 最近记录: |