@Singleton
@dagger.Component(modules = {
AppModule.class
})
public interface AppComponent {
void inject(MyApp application);
Model model();
Context context();<--- should provide the application Context for the Object above (model)
...
实现如下所示
@dagger.Module
public class AppModule {
private final Application app;
public ApplModule(Application app) {
this.app = app;
}
@Provides
@Singleton
Model provideModel(Bus bus) {
return new Model(bus);
}
@Provides
@Singleton
Context provideApplicationContext() {
return app.getApplicationContext();
}
...
>
其次,我有一个活动范围组件网,我提供了当前活动和需要上下文的不同视图。
@ActivityScope
@Component(
dependencies = AppComponent.class
, modules = {ActivityModule.class}
)
public interface ActivityComponent {
void inject(MyActivity activity);
Context context(); <---should provide the activity's context
MyView homeView(); <----takes a Context as a contructor parameter
@module public class ActivityModule{private
public ActivityModule(Activity activity) {
this.activity = activity;
}
@Provides
@ActivityScope
public Activity activity() {
return activity;
}
@Provides
@ActivityScope
@Named("viewcontext") <----- if I removed this I get an error from Dagger
public Context context() {
return activity;
}
@Provides
@ActivityScope
MyView provideZeView(Bus bus, Model model) { <---- previously receiving the ApplicationContext as a parameter
MyView v = new MyView(activity, bus, model); <---- must pass the activity otherwise passing the Context reveived is the ApplicationContext
return v;
}
可以使用这样的限定符。在两个独立的文件中定义以下内容:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ActivityContext {
}
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface ApplicationContext {
}
然后在您的ActivityModule中执行以下操作:
@Provides
@ActivityScope
@ActivityContext
public Context context() {
return activity;
}
同样地,在appmodule中执行以下操作:
@Provides
@Singleton
@ApplicationContext
Context provideApplicationContext() {
return app.getApplicationContext();
}
例如,在您的活动中,您可以这样做:
@Inject @ApplicationContext
Context c;
它将注入应用程序上下文。
在一个模块中,您可以这样做,例如:
@Provides
@ActivityScope
LoginPresenter provideLoginPresenter(@ActivityContext Context context) {
return new LoginPresenter(context);
}
问题内容: 关于这两个上下文的内容,已经有很多文章了。但是我仍然不太正确。 到目前为止,据我了解:每个实例都是其类的一个实例,这意味着某些程序员建议您尽可能频繁地使用它,以免“泄漏”任何内存。这是因为另一个this(获取Activity实例上下文)指向的Activity是每次用户倾斜手机或离开应用程序等时都将销毁的一个。显然,垃圾收集器(GC)无法捕获,因此使用了过多的内存。 .. 但是任何人都可
0.9 新版功能. Flask 背后的设计理念之一就是,代码在执行时会处于两种不同的“状态”(states)。 当 Flask 对象被实例化后在模块层次上应用便开始隐式地处于应用配置状 态。一直到第一个请求还是到达这种状态才隐式地结束。当应用处于这个状态的时候 ,你可以认为下面的假设是成立的: 程序员可以安全地修改应用对象 目前还没有处理任何请求 你必须得有一个指向应用对象的引用来修改它。不会有某
我多年来一直在使用Spring MVC,我试图理解与Spring Boot的一些关键区别。 你能帮我确认一下吗?或者让我明白我在这里遗漏了什么?
我想使用下面另一个活动简单代码示例中的活动上下文,有什么想法吗? 谢谢
我试图并行处理Spring批处理作业中的一些步骤。作业的XML配置如下:
Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点。Spring Cloud建立在此之上,并添加了一些可能系统中所有组件将使用或偶尔需要的功能。 引导应用程序上下文 一个Spring Cloud应用程序通过创建一个“引导”上下文来进行操作,这个上下文是主应用程序的父上下文。开箱即用,负责从外部源加载配置属性,还解