Dagger 2 注入没有模块的单例
Dagger 2 inject singleton without module
我正在使用 Dagger 2 注入来为客户端提供一些依赖:
public class Dependency {
@Inject
Dependency() {
}
void check() {
System.out.print("Instantiated");
}
}
public class Client {
@Inject Dependency dependency;
Client() {
ClientComponent component = DaggerClientComponent.create();
component.inject(this);
}
void checkDependency() {
dependency.check();
}
}
@Component
public interface ClientComponent {
void inject(Client client);
}
public class Test {
public static void main(String... args) {
Client client = new Client();
client.checkDependency();
}
}
它工作正常,但现在我想使我的依赖单例。我怎样才能实现它?我应该为此依赖项创建模块并使用单例注释来注释提供方法,还是我有其他选项来避免创建模块?
在您的 class 顶部添加 @Singleton 并向您的组件添加 @Singleton 注释。
@Singleton
public class Dependency {
@Inject
Dependency() {
}
void check() {
System.out.print("Instantiated");
}
}
@Singleton
@Component
public interface ClientComponent {
void inject(Client client);
}
您还应该将组件的创建移至更好的位置 - 应用对象的 onCreate 方法是正确的位置。
我正在使用 Dagger 2 注入来为客户端提供一些依赖:
public class Dependency {
@Inject
Dependency() {
}
void check() {
System.out.print("Instantiated");
}
}
public class Client {
@Inject Dependency dependency;
Client() {
ClientComponent component = DaggerClientComponent.create();
component.inject(this);
}
void checkDependency() {
dependency.check();
}
}
@Component
public interface ClientComponent {
void inject(Client client);
}
public class Test {
public static void main(String... args) {
Client client = new Client();
client.checkDependency();
}
}
它工作正常,但现在我想使我的依赖单例。我怎样才能实现它?我应该为此依赖项创建模块并使用单例注释来注释提供方法,还是我有其他选项来避免创建模块?
在您的 class 顶部添加 @Singleton 并向您的组件添加 @Singleton 注释。
@Singleton
public class Dependency {
@Inject
Dependency() {
}
void check() {
System.out.print("Instantiated");
}
}
@Singleton
@Component
public interface ClientComponent {
void inject(Client client);
}
您还应该将组件的创建移至更好的位置 - 应用对象的 onCreate 方法是正确的位置。