Android dagger无法插入类型参数字段

Android dagger无法插入类型参数字段,android,dependency-injection,dagger,dagger-2,Android,Dependency Injection,Dagger,Dagger 2,我正在开发一个android应用程序,并尝试在一个抽象类中注入一个类型参数化的字段:BaseListFragment public abstract class BaseListFragment<E, A extends ArrayAdapter<E>, S> extends BaseFragment { @Inject protected S service; } 这是我的服务模块: @Module( complete = false,

我正在开发一个android应用程序,并尝试在一个抽象类中注入一个类型参数化的字段:BaseListFragment

public abstract class BaseListFragment<E, A extends ArrayAdapter<E>, S> extends BaseFragment
{
    @Inject protected S service;
}
这是我的服务模块:

@Module(
        complete = false,
        library = true
)
public class ServiceModule
{
    @Provides @Singleton BucketService provideBucketService(RestAdapter restAdapter)
    {
        return restAdapter.create(BucketService.class);
    }

    @Provides @Singleton ProjectService provideProjectService(RestAdapter restAdapter)
    {
        return restAdapter.create(ProjectService.class);
    }

    @Provides @Singleton ShotService provideShotService(RestAdapter restAdapter)
    {
        return restAdapter.create(ShotService.class);
    }

    @Provides @Singleton TeamService provideTeamService(RestAdapter restAdapter)
    {
        return restAdapter.create(TeamService.class);
    }

    @Provides @Singleton UserService provideUserService(RestAdapter restAdapter)
    {
        return restAdapter.create(UserService.class);
    }
}
下面是一个扩展BaseListFragment的类示例:

public class ProjectFragment extends BaseEntityFragment<Project, ProjectViewAdapter, ProjectService>
{
}
公共类ProjectFragment扩展了BaseEntityFragment
{
}
是否仍然需要注入参数化类型


关于,

我也无法让它工作,我认为这违背了dagger的设计理念,即生成开发人员也会编写的代码

在本例中,它为抽象类生成一个注入适配器,为具体类生成另一个注入适配器。对于抽象类的泛型参数,您必须在每个具体类注入器中注入抽象类中的字段

如果不是android对象(由android运行时创建),我建议在调用超级构造函数时传递服务

在这种情况下,我建议将服务注入到具体类中,并使用抽象方法提供服务:

protected abstract S getService();

从2.0.1版本开始,Dagger2执行您所说的注射类型。看看所有的各种排列。

我也遇到了同样的问题,通过添加一个非参数化的内部类并注入到该类中,解决了这个问题。然后使用getter将注入的类取出

看起来是这样的:

public class MainClass<T>{

   UtilityClass utility;

   public MainClass(){
       utility = new InjectorHelper().getHelper();
   }

   ...

   public static class InjectorHelper{

       @Inject
       UtilityClass utilityClass;

       public InjectorHelper(){
           Injector.getInstance().getAppComponent().inject(this);
       }

       public UtilityClass getUtilityClass(){
           return utilityClass
       }
   }
}
public类MainClass{
效用类效用;
公共类(){
实用工具=新的InjectorHelper().getHelper();
}
...
公共静态类InjectorHelper{
@注入
实用类实用类;
公共InjectorHelper(){
Injector.getInstance().getAppComponent().Injector(此);
}
公共实用类getUtilityClass(){
返回实用类
}
}
}
public class MainClass<T>{

   UtilityClass utility;

   public MainClass(){
       utility = new InjectorHelper().getHelper();
   }

   ...

   public static class InjectorHelper{

       @Inject
       UtilityClass utilityClass;

       public InjectorHelper(){
           Injector.getInstance().getAppComponent().inject(this);
       }

       public UtilityClass getUtilityClass(){
           return utilityClass
       }
   }
}