我正在尝试为依赖注入实现dagger2。以前我使用Roboguice进行依赖注入,但是当我将其更新为RG3时它停止了工作。所有注入的视图都为null。所以我想尝试使用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 / art: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> (一个dagger.internal.ScopedProvider)