我正在尝试为依赖注入实现 dagger2。以前我使用 Roboguice 进行依赖注入,但是当我将它更新到 RG3 时它停止工作。所有注入的视图都是空的。所以我正在尝试使用 Dagger2。从来没有使用过 dagger1 的经验。
以下是我尝试使用的类。
@Module
public class NTMAModule {
NTMA app;
public NTMAModule(final NTMA app) {
this.app = app;
}
// EdgeConnection
@Provides
@Singleton
EdgeConnection provideEdgeConnection() {
return new EdgeConnection();
}
// MessageCenterConnection
@Provides
@Singleton
MessageCenterConnection provideMessageCenterConnection() {
return new MessageCenterConnection();
}
// ConnectionManager
@Provides
@Singleton
ConnectionManager provideConnectionManager() {
return new ConnectionManager();
}
// AccountManager
@Provides
@Singleton
AccountManager provideAccountManager(EdgeConnection connection) {
return new AccountManager(connection);
}
....
}
所以在上面的模块中,我实例化了我需要的所有对象。
以下是我的组件类
@Singleton
@Component(modules = {NTMAModule.class})
public interface NTMAComponent {
ConnectionManager connectionManager();
EdgeConnection edgeConnection();
MessageCenterConnection messageCenterConnection();
AccountManager accountManager();
void inject(Order order);
void inject(Position pos);
void inject(GroupObject gp);
void inject(LoginFragment fragment);
void inject(ReconnectingFragment fragment);
void inject(EdgeConnection connection);
void inject(LoginActivity act);
void inject(BaseActivity act);
void inject(ConnectionManager cm);
void inject(MessageCenterManager mcm);
}
这是我的注射器类
public enum Injector {
INSTANCE;
NTMAComponent applicationComponent;
Injector() {
}
void initializeInjector(NTMA application) {
NTMAComponent component = DaggerNTMAComponent.builder().nTMAModule(new NTMAModule(application)).build();
applicationComponent = component;
}
public NTMAComponent getComponent() {
return applicationComponent;
}
}
注入器正在应用程序类 onCreate() 中初始化。
然后 onCreate 不同的活动,对于 ConnectionManager、AccountManager、EdgeConnection 等类,我在构造函数中使用它来使用组件注入字段成员来注入它们。
Injector.INSTANCE.getComponent().inject(this);
但是在应用程序启动时,我得到了以下日志……而且它还在继续。然后stackoverflows和应用程序崩溃。什么都没有出现。
01-04 15:30:36.761 12125-12125/? A/艺术:sart/runtime/runtime.cc:292]
在 dagger.internal.ScopedProvider.get(ScopedProvider.java:46) 01-04 15:30:36.761 12125-12125/?A/art: sart/runtime/runtime.cc:292] - 锁定 <0x13515e62> (a dagger.internal.ScopedProvider)