Roboguice - 一个接口的两个实现

时间:2014-05-09 10:03:47

标签: java android dependency-injection roboguice

我的代码是这样的:

interface MyIntreface{
     ...
}

class A implements MyInterface{}     
class B implements MyInterface{}  

class BaseClass{
    @Inject
    MyInterface  instance;
}

class MyFirstClass extends BaseClass{
   ....
}

class MySecondClass extends BaseClass{
   ....
}

现在我想MyFirstClass有实现A和MySecondClass实现B. @Named注释似乎在这种情况下不起作用。还有其他机器人解决方案吗?

1 个答案:

答案 0 :(得分:0)

使用Roboguice无法实现此用例。但有两种方法可以解决您的问题。

  • 实现注入MyFirstClass和MySecondClass的提供程序,然后注入提供程序A或B并使用setter在创建的实例中设置它
  • class Baclass BaseClass{ protected abstract MyInterface extractMyInterface();
    } class MyFirstClass extends BaseClass{ @Inject B instance; protected MyInterface extractMyInterface() { return instance; }
    } class MySecondClass extends BaseClass{ @Inject A instance; protected MyInterface extractMyInterface() { return instance; } }

在我看来,第一个(提供者)更清洁。