基于运行时检查,辅助注入以注入不同的依赖项

问题描述 投票:0回答:1

我有一个应用程序类“ Application”,一个抽象类“ AbstractClass”由“ Impl1”和“ Impl2”扩展。应用程序类根据收到的输入获取impl1或impl2来执行某些任务。

当前,我将两个类都注入到应用程序类中,如下所示。然后根据输入,我要求impl1或impl2执行任务。

public class Application {

         private static final Data data1 = DATA_CONFIG.data_1;
         private final AbstractClass impl1;
         private final AbstractClass impl2;

         @Inject
         Application(final AbstractClass impl1, final AbstractClass impl2){
               this.impl1 = impl1;
               this.impl2 = impl2;
         }

         public void mainTask(final Data data){

               if(data == data1){
                    impl1.performTask();
               }else{
                    impl2.performTask();
               }
         }
}

但是,有什么方法可以使用辅助注入或类似的概念来仅注入所需的依赖项,因此,例如,输入为data1,我仅注入impl1而不注入impl2。??

java dependency-injection guice assisted-inject
1个回答
0
投票

因此,您要根据注入点的特定上下文选择注入的对象-特别是Data对象的值。我没有做这些事情,也不能保证成功,但是您可以尝试custom injections

此外,您也可以执行factory之类的操作。但是恕我直言,这种方法并没有比原始方法好多少,因为它只会将在impl1和impl2之间的选择移动到您必须首先创建的工厂类。

素描:

@Inject
Application(IAbstractClassFactory factory){
    this.factory = factory
}

void mainTask(final Data data){
    impl = factory.create(data)
}
© www.soinside.com 2019 - 2024. All rights reserved.