您正在使用中而犯了一个错误
DaggerBootstrap.create().initialize(this);
在您的活动中,因为范围不在多个组件实例之间共享。我建议使用自定义应用程序类
public class CustomApplication extends Application { @Override public void onCreate() { super.onCreate(); Bootstrap.INSTANCE.setup(); }}@Component@Singletonpublic interface _Bootstrap { void initialize(ActivityA activityA); //void initiali...}public enum Bootstrap { INSTANCE; private _Bootstrap bootstrap; void setup() { bootstrap = Dagger_Bootstrap.create(); } public _Bootstrap getBootstrap() { return bootstrap; }}然后你可以称它为
Bootstrap.INSTANCE.getBootstrap().initialize(this);
这样,您可以在各个类之间共享组件。我个人将其命名
Bootstrap为
injector,并将
_Bootstrap其命名为,
ApplicationComponent因此它看起来像这样:
Injector.INSTANCE.getApplicationComponent().inject(this);
但这只是我的典型设置。名称并不重要。
编辑:对于您的最后一个问题,您可以通过子范围和组件依赖关系解决此问题。
您的图书馆项目应该只能看到图书馆的类,对吗?在这种情况下,您要做的就是
@Scope@Retention(RetentionPolicy.RUNTIME)public @interface LibraryScope {}@Component(modules={LibraryModule.class})@LibraryScopepublic interface LibraryComponent { LibraryClass libraryClass(); //provision method for `MyManager`}@Modulepublic class LibraryModule { @LibraryScope @Provides public LibraryClass libraryClass() { //in your example, LibraryClass is `MyManager` return new LibraryClass(); //this is instantiation of `MyManager` }}public enum LibraryBootstrap { INSTANCE; private LibraryComponent libraryComponent; static { INSTANCE.libraryComponent = DaggerLibraryComponent.create(); } public LibraryComponent getLibraryComponent() { return libraryComponent; }}@Scope@Retention(RetentionPolicy.RUNTIME)public @interface ApplicationScope {}@Component(dependencies={LibraryComponent.class}, modules={AdditionalAppModule.class})@ApplicationScopepublic interface ApplicationComponent extends LibraryComponent { AdditionalAppClass additionalAppClass(); void inject(InjectableAppClass1 injectableAppClass1); void inject(InjectableAppClass2 injectableAppClass2); void inject(InjectableAppClass3 injectableAppClass3);}@Modulepublic class AdditionalAppModule { @ApplicationScope @Provides public AdditionalAppClass additionalAppClass() { //something your app shares as a dependency, and not the library return new AdditionalAppClass(); }}public enum ApplicationBootstrap { INSTANCE; private ApplicationComponent applicationComponent; void setup() { this.applicationComponent = DaggerApplicationComponent.builder() .libraryComponent(LibraryBootstrap.INSTANCE.getLibraryComponent()) .build(); } public ApplicationComponent getApplicationComponent() { return applicationComponent; }}然后
@InjectLibraryClass libraryClass; //MyManager myManager;... ApplicationBootstrap.INSTANCE.getApplicationComponent().inject(this);



