匕首2 - 如何注入一个我不控制对象实例的类

By simon at 2018-02-07 • 0人收藏 • 41人看过

我有一个类,通过插入链接到另一个库 “.class”,所以我不知道如何在t中注入一个依赖项他的课,因为我不是 创建对象和库的人只是实例化类 与默认的构造函数。例: 这个房间的转换器类

public class AttendeeListConverter {

    @TypeConverter
    public List<Attendee> fromJson(String attendeesJson) {
        if (attendeesJson == null) {
            return null;
        }
        return gson.fromJson(attendeesJson, new TypeToken<List<Attendee>>() { }.getType());
    }
}
我想注入我的Gson单例实例,但我不是那个我小号 创建该转换器类的对象,我只是通过了 “AttendeesListConverter.class”和对象的创建本身就是代码 产生。

2 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

我不认为有一个干净的解决方案,如果你不控制的话 创建对象,也不能访问对象实例之后。 鉴于这些情况,你可以做的唯一事情就是抓取一个组件 从你的对象内,让它注入自己。

class Injector {
  public static AppComponent component;
}

class AttendeeListConverter {

  public AttendeeListConverter() {
    AppComponent component = Injector.component
    component.inject(this);
  }
}

// and initialize it in onCreate of your Application

class MyApp extends Application {
  @Inject AppComponent appComponent;

  onCreate() {
    // ...setup...

    Injector.component = appComponent
  }
}
您当然也可以将组件静态存储在应用程序中 本身或某些人o喜欢以静态方式存储应用程序 变量,所以你可以使用MyApp.appComponent.inject()来代替。

2018-02-07   #2

我不认为有一个干净的解决方案,如果你不控制的话 创建对象,也不能访问对象实例之后。 鉴于这些情况,你可以做的唯一事情就是抓取一个组件 从你的对象内,让它注入自己。

class Injector {
  public static AppComponent component;
}

class AttendeeListConverter {

  public AttendeeListConverter() {
    AppComponent component = Injector.component
    component.inject(this);
  }
}

// and initialize it in onCreate of your Application

class MyApp extends Application {
  @Inject AppComponent appComponent;

  onCreate() {
    // ...setup...

    Injector.component = appComponent
  }
}
您当然也可以将组件静态存储在应用程序中 本身或某些人o喜欢以静态方式存储应用程序 变量,所以你可以使用MyApp.appComponent.inject()来代替。

登录后方可回帖

Loading...