0

我正在尝试为依赖注入实现 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)

4

0 回答 0