0

依存性注入のために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);

しかし、アプリケーションの起動時に、次のログを取得します...そして、それは続きます。その後、スタックオーバーフローが発生し、アプリがクラッシュします。何も表示されません。

01-04 15:30:36.761 12125-12125/? A/art: sart/runtime/runtime.cc:292]
at 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)

4

0 に答える 0