如何在非活动类中使用此语句?

时间:2015-08-16 19:20:57

标签: android dependency-injection dagger

我需要此语句来激活dep。注射....

 ((App) getApplication()).inject(this);

            //or in fragment

 ((App) getActivity().getApplication()).inject(this);

此语句在“活动和片段和服务”中正常工作,但如何使此语句在基于非活动/片段/服务的类中工作?

2 个答案:

答案 0 :(得分:1)

您使用的依赖注入框架是什么?看起来它可能是dagger,在这种情况下,您可以使用带有@Inject注释的构造函数,并通过它传递依赖关系(其中Foo是您的类,而Bar是依赖关系) ):

private final Bar mBar;

@Inject
public Foo(Bar bar) {
    mBar = bar;
}

在您的模块中,您需要以下内容:

@Provides
public Foo providesFoo(Foo foo) {
    return foo;
}

如果你使用匕首(即使你是),我建议你在你的应用程序类中创建一个静态方法来获取应用程序的实例以避免强制转换它,允许它可以从您的应用程序中的任何位置访问(虽然我个人只在活动/片段/服务/等中调用它)。我使用这样的东西:

private static App sInstance;

public static App getInstance() {
    return sInstance;
}

@Overrride
public void onCreate() {
    super.onCreate();
    sInstance = this;
}

答案 1 :(得分:0)

您可以将上下文从活动或片段传递到非活动类,而替代解决方案是您可以使用应用程序上下文。比如定义一个函数

  

的getContext()

在您的应用程序调用中并从中返回应用程序上下文。