Android Реализовать заводской шаблон проектирования, например Java - PullRequest
0 голосов
/ 03 августа 2020

Как я могу получить заводской метод с использованием Android и Hilt / Dagger, используя пример кода java. Возможен ли этот шаблон проектирования в Android Hilt / Dagger и как его реализовать. Не могу найти хорошее решение в сети

Спасибо, Джон

public class ScannerFactory {

    private ScannerFactory() {
    }

    /**
     * Get the scanner device
     *
     * @param scannerType - The scanner type, one of A or B
     * @param context     - The apps context
     * @return
     */
    public static ScannerDevice getScannerDevice(final String scannerType, final Context context) {
        if (scannerType.equals("A")) {
            return new DeviceA(context);
        } else if (scannerType.equals("B")) {
            return new DeviceB(context);
        }
        throw new IllegalArgumentException("Wrong device");
    }
}

1 Ответ

0 голосов
/ 05 августа 2020

Судя по вашему javado c, вам нужен Application Context (а не Acitivity контекст). Итак, вы должны сделать это следующим образом:

@Singleton
public class ScannerFactory {

    private final Context context;

    @Inject
    public ScannerFactory(@ApplicationContext Context context) {
        this.context = context;
    }

    /**
     * Get the scanner device
     *
     * @param scannerType - The scanner type, one of A or B
     * @return
     */
    public static ScannerDevice getScannerDevice(final String scannerType) {
        if (scannerType.equals("A")) {
            return new DeviceA(context);
        } else if (scannerType.equals("B")) {
            return new DeviceB(context);
        }
        throw new IllegalArgumentException("Wrong device");
    }
}

, а затем, когда вы захотите это использовать, вы следуете обычным правилам для Injecting зависимостей, используя Hilt . Так например:

@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {

    @Inject
    ScannerFactory scannerFactory;

    //... rest of the Activity code
}
...