Невозможно внедрение зависимости в CodecProvider с MongoDB Panache? - PullRequest
1 голос
/ 06 августа 2020

Я могу справиться с созданием собственного поставщика кода MongoDB c, как описано в официальной документации , но можно ли получить инъекцию зависимостей в CodecProvider, как показано ниже?

@ApplicationScoped
public class MyCodecProvider implements CodecProvider {

    @Inject
    HistoryService historyService;

    @Override
    public <T> Codec<T> get(Class<T> clazz, CodecRegistry registry) {
        if(History.class.isAssignableFrom(clazz))
            return new HistoryCodec(historyService.getSchema());
        return null;
    }
}

Если нет, то как бы вы реализовали ориентированный на приложение код c в Quarkus?

Damien

1 Ответ

1 голос
/ 07 августа 2020

Это невозможно, и я не думаю, что мы будем его поддерживать.

Цель кода MongoDB c - сериализовать объект в базу данных MongoDB, это не компонент CDI, это просто POJO.

Это те же классы, что и сериализатор / десериализатор Jackson или JSON -B, и они тоже не являются компонентами CDI.

Если вы хотите выполнить этап сопоставления (это это то, что, кажется, делает ваш код), вы должны сделать это на своем уровне обслуживания, прежде чем сохранять объект в MongoDB.

Код c - это просто класс, который обрабатывает, как атрибут объекта (подумайте Java Bean например) отображаются на документ BSON. На нем не должно быть сложных вычислений (представьте, что кто-то вызовет базу данных из кода c!).

...