3

アプリケーションで Guice フレームワークを使用しています。例に示すように、単一のクラスが同じインターフェイス C の複数のインスタンスを必要とするシナリオがあります (ただし、目的は異なります)。注釈機能を使用してこれを解決しようとしています。

以下の例に示すように、ConcreteImpl の構成も Guice によって注入されるようにします。しかし問題は、type1、type2、および type3 インスタンスの構成が異なる可能性があることです。これらのインスタンスの構成をアプリオリに持っていると仮定すると、構成を要求するインスタンスのコンテキスト (注釈で示される) に従ってそれらを注入する機能はありますか?

    class A {
        @Inject
        public A(@Purpose1 C type1, @Purpose2 C type2, @Purpose3 C type3) {

        }
    }

    interface C {}

    class ConcreteImpl implements C {
        @Inject
        public ConcreteImpl(ConcreteImplConfig config) {}
    }

    class ConcreteImplConfig {
        String pty1;
        String pty2;
    }  

私のモジュールバインディングはこのようなものです -

    bind(C.class)
            .annotatedWith(Purpose1.class)
            .to(purpose1Cklass/**obtained from config**/);

    bind(C.class)
            .annotatedWith(Purpose2.class)
            .to(purpose2Cklass/**obtained from config**/);

    bind(C.class)
            .annotatedWith(Purpose3.class)
            .to(purpose3Cklass/**obtained from config**/);

そして、これは私がやりたいことのほとんどです

    bind(ConcreteImplConfig.class)
            .requestedThrough(Purpose1.class)
            .toInstance(purpose1config);

    bind(ConcreteImplConfig.class)
            .requestedThrough(Purpose2.class)
            .toInstance(purpose2config);

    bind(ConcreteImplConfig.class)
            .requestedThrough(Purpose3.class)
            .toInstance(purpose3config);

私はすでにファクトリを注入できる支援された注入を見てきましたが、それから factory.create(config) を使用しますが、コントラクトが少し醜くなる傾向があり、すべての構成が私のアプリケーションの開始とそれらを注入できるはずです。

4

1 に答える 1