初学者问个guice的问题

我自己有一个OverrideModuleC2, 现在想用它在ModuleA中把ModuleC2替换掉。可是ModuleB是不能动的。求问如何做这个替换?

class moduleA extends AbstractModule {
@Override
protected void configure() {
install(Modules.override(new ModuleB()).with(new OverrideModuleB()));
// something else
}
}

class ModuleB extends AbstractModule {
@Override
protected void configure() {
install(new ModuleC1());
install(new ModuleC2());
install(new ModuleC3());
}
}

 class moduleA extends ModuleB { 
    @Override 
    protected void install2() { 
        install(new ModuleC2());  
        // something else 
    } 
}

abstract class ModuleB extends AbstractModule { 
    @Override 
    protected void configure() { 
        install(new ModuleC1()); 
        install2();
        install(new ModuleC3()); 
    } 
    abstract void install2();
}

是不是你想要的

ModuleB 不能改,因为好多别的project引用。这种方法要迫使别的projet实现install2方法。
可不可以实现ModuleB2,install ModuleB 并替换ModuleC2 ? 然后ModuleA里面使用ModuleB2, 如下:

class ModuleB2 extends AbstractModule { 
    @Override 
    protected void configure() { 
        install(Modules.override(new ModuleB()).with(new ModuleC2())); 
    } 
}

class ModuleA extends AbstractModule { 
    @Override 
    protected void configure() { 
        // Remove below line and use ModuleB2 instead
                    // install(Modules.override(new ModuleB()).with(new ModuleC2())); 

                    install(Modules.override(new ModuleB2()).with(new OverrideModuleB())); 
    } 
}