如何在 Quarkus 中创建自定义范围?

How to create a custom scope in Quarkus?

我尝试按照此说明进行操作 https://rpestano.wordpress.com/2013/06/30/cdi-custom-scope/ ,但它不起作用,因为我的自定义 Context 的方法没有被触发。

您可以在 Quarkus 中声明自定义范围。但是,Quarkus 不使用完整的 CDI 实现,而是有一个较轻的实现,不支持您从 CDI 知道的一切你习惯的方式。原因有很多,但主要是为了使其构建时间友好。

CDI 扩展是本质上基于运行时的东西之一,因此不适合 Quarkus 的东西。相反,您必须使用 Quarkus 扩展来声明您的 scope/context。让我给你一些材料...

这里是 link 到 Quarkus CDI 的一般指南,它列出了它的局限性以及它如何弥补它。

This bit in particular 显示如何在扩展中注册自定义范围。方法很简单:

@BuildStep
ContextRegistrarBuildItem customContext() {
    return new ContextRegistrarBuildItem(new ContextRegistrar() {
         public void register(RegistrationContext registrationContext) {
            registrationContext.configure(CustomScoped.class).normal().contextClass(MyCustomContext.class).done();
         }
    });
}

以及 Narayana 用来激发灵感的 here is a link to how Narayana Quarkus extension uses this exact same API to register @Transactional. The underlying context class is very similar to what you would use in CDI (or in Weld), take a look at this class