Jersey で注入された @Context パラメーターと Guice で注入されたパラメーターの両方を使用して、コンストラクション インジェクションを使用しようとしています。
これは機能します(純粋なJerseyインジェクション):
@Path("top")
public class TopLevel
{
public TopLevel(@Context ResourceContext context)
{
..
}
}
これは機能します(純粋なGuiceインジェクション):
@Path("top")
public class TopLevel
{
@Inject
public TopLevel(MyService service)
{
..
}
}
しかし、これは機能しません:
@Path("top")
public class TopLevel
{
@Inject
public TopLevel(MyService service, @Context ResourceContext context)
{
..
}
}
Guice は ResourceContext を注入する方法を知らないためです。JerseyServletModuleを見ると、次のクラスが挿入されていることがわかります。
WebApplication, Providers, FeaturesAndProperties, MessageBodyWorkers, ExceptionMapperContext, HttpContext, UriInfo, ExtendedUriInfo, HttpRequestContext, HttpHeaders, Request, SecurityContext and HttpResponseContext
ResourceContext ではありません。何か案は?
UPDATE : ResourceContext を使用して別のインスタンス フィールドをインスタンス化する必要があるため、フィールド インジェクションを使用できないと思います。例えば:
public class Foo
{
public Foo(ResourceContext context) {}
}
public class Bar
{
private final MyService service;
private final ResourceContext context;
private final Foo foo;
@Inject
public Bar(MyService service, @Context ResourceContext context)
{
this.foo = new Foo(context);
}
}
コンストラクターの後に ResourceContext をインスタンス化しようとすると、インスタンス化できませんでしFoo
た。