私はクラスAとインターフェイスIInterfaceを持っています。私は2人のメンバーを注入する必要がある だからA.果物入りC++依存性注入
にメソッドはIInterface:
class A {
IInterface* i1;
IInterface* i2;
};
は、私が使用したフルーツのDIフレームワークに2人のメンバー(I1とI2)を注入することはできますか?
私はクラスAとインターフェイスIInterfaceを持っています。私は2人のメンバーを注入する必要がある だからA.果物入りC++依存性注入
にメソッドはIInterface:
class A {
IInterface* i1;
IInterface* i2;
};
は、私が使用したフルーツのDIフレームワークに2人のメンバー(I1とI2)を注入することはできますか?
私はフルーツの著者です(このスレッドに私を指してくれてありがとう!)。 そのクラスを注入する最も簡単な方法は、コンストラクタインジェクションです。あなたは両方に結合する必要がありますあなたのget*Component()
機能で
using namespace fruit;
struct FirstI {};
struct SecondI {};
class A {
IInterface* i1;
IInterface* i2;
public:
INJECT(A(ANNOTATED(FirstI, IInterface*) i1,
ANNOTATED(SecondI, IInterface*) i2))
: i1(i1), i2(i2) {}
};
:2つのインタフェースが(あなたの例のように)同じであり、あなたは、2つの異なるインスタンスをしたいと仮定すると、あなたは次のようになり、注釈付きの注射を、使用することができます(彼らは別の注釈を持っているので、同じタイプ、または異なるタイプの、二つは完全に独立している):
class FirstIImpl : public IInterface {
....
public:
INJECT(FirstIImpl()) = default;
};
class SecondIImpl : public IInterface {
....
public:
INJECT(SecondIImpl()) = default;
};
Component<A> getAComponent() {
return createComponent()
.bind<fruit::Annotated< FirstI, IInterface>, FirstIImpl>()
.bind<fruit::Annotated<SecondI, IInterface>, SecondIImpl>();
}
注釈付き注射はフルーツ2.xでの新機能である、私はそれを文書化する時間がなかったですまだ(申し訳ありません)。うまくいけば、上記の例はあなたが望むものでなければなりません。
2つのインターフェイスを同じタイプにバインドする場合は、実装クラスに注釈を付ける必要があります.1つではなく、2つのノード(オブジェクト)が注入グラフに表示されます。例:
Component<A> getAComponent() {
return createComponent()
.bind<fruit::Annotated< FirstI, IInterface>,
fruit::Annotated< FirstI, IImpl>>()
.bind<fruit::Annotated<SecondI, IInterface>,
fruit::Annotated<SecondI, IImpl>>();
}
恐ろしいです!これは私が必要とするものです。あなたの答え、マルコありがとう! –
開発者に連絡しましたか? –
いいえ、私はグーグルでたくさんの例を見て、ギブスをチェックしました –