Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;水果依赖性注射_C++_Dependency Injection - Fatal编程技术网

C++ C++;水果依赖性注射

C++ C++;水果依赖性注射,c++,dependency-injection,C++,Dependency Injection,我有A类和接口接口。 我需要在A中注入2个成员接口 因此: 我可以将两个成员(i1和i2)注入到using fruit DI框架中吗?我是fruit的作者(感谢Alan为我指出这条线索!)。 注入该类的最简单方法是构造函数注入。假设两个接口相同(如示例中所示),并且您需要两个不同的实例,则可以使用注释注入,如下所示: using namespace fruit; struct FirstI {}; struct SecondI {}; class A { IInterface* i1

我有A类和接口接口。 我需要在A中注入2个成员接口

因此:

我可以将两个成员(i1和i2)注入到using fruit DI框架中吗?

我是fruit的作者(感谢Alan为我指出这条线索!)。 注入该类的最简单方法是构造函数注入。假设两个接口相同(如示例中所示),并且您需要两个不同的实例,则可以使用注释注入,如下所示:

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) {}
};
get*Component()
函数中,您必须同时绑定这两种类型(对于相同的类型或不同的类型,这两种类型是完全独立的,因为它们具有不同的注释):

class FirstIImpl:公共接口{
....
公众:
INJECT(FirstIImpl())=默认值;
};
第二类示例:公共接口{
....
公众:
INJECT(SecondIImpl())=默认值;
};
组件getAComponent(){
返回createComponent()
.bind,FirstIImpl>()
.bind();
}
注释注入是水果2.x中的一个新特性,我还没有时间记录它(对不起)。希望上面的例子应该是你想要的,如果不让我知道的话

如果要将两个接口绑定到同一类型,还必须对实现类进行注释,以便在注入图中有2个节点(对象),而不是1个。例如:

Component<A> getAComponent() {
    return createComponent()
        .bind<fruit::Annotated< FirstI, IInterface>,
              fruit::Annotated< FirstI, IImpl>>()
        .bind<fruit::Annotated<SecondI, IInterface>,
              fruit::Annotated<SecondI, IImpl>>();
}
Component getAComponent(){
返回createComponent()
绑定
水果::注释>()
.bind();
}
我是《水果》的作者(感谢艾伦给我指出这条线索!)。 注入该类的最简单方法是构造函数注入。假设两个接口相同(如示例中所示),并且您需要两个不同的实例,则可以使用注释注入,如下所示:

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) {}
};
get*Component()
函数中,您必须同时绑定这两种类型(对于相同的类型或不同的类型,这两种类型是完全独立的,因为它们具有不同的注释):

class FirstIImpl:公共接口{
....
公众:
INJECT(FirstIImpl())=默认值;
};
第二类示例:公共接口{
....
公众:
INJECT(SecondIImpl())=默认值;
};
组件getAComponent(){
返回createComponent()
.bind,FirstIImpl>()
.bind();
}
注释注入是水果2.x中的一个新特性,我还没有时间记录它(对不起)。希望上面的例子应该是你想要的,如果不让我知道的话

如果要将两个接口绑定到同一类型,还必须对实现类进行注释,以便在注入图中有2个节点(对象),而不是1个。例如:

Component<A> getAComponent() {
    return createComponent()
        .bind<fruit::Annotated< FirstI, IInterface>,
              fruit::Annotated< FirstI, IImpl>>()
        .bind<fruit::Annotated<SecondI, IInterface>,
              fruit::Annotated<SecondI, IImpl>>();
}
Component getAComponent(){
返回createComponent()
绑定
水果::注释>()
.bind();
}

你试过联系开发人员吗?没有,我在谷歌上搜索了很多示例并查看了他们的GitHub你试过联系开发人员吗?没有,我在谷歌上搜索了很多示例并查看了他们的GitHub真棒!这正是我需要的。谢谢你的回答,马可!令人惊叹的!这正是我需要的。谢谢你的回答,马可!