繁体   English   中英

使用依赖注入注入参数

[英]Injecting parameters with dependency injection

我试图在我的项目中设置依赖注入( https://boost-ext.github.io/di/ )并得到以下编译错误“没有匹配的重载 ZC1C425268E683id941AB507A 模板”和“inval74F”1 .

我的测试设置如下

#include "di.hpp"
namespace di = boost::di;

class IA{
public:
    virtual void doSomething() = 0;
};

class IB{
public:
    virtual void doSomething() = 0;
};

class IC{
public:
    virtual void doSomething() = 0;
};

class A : public IA {
public:
    void doSomething() override {
    }
};

class B : public IB {
public:
    void doSomething() override {

    }
};

class C : public IC{
    std::shared_ptr<A> a_;
    std::shared_ptr<B> b_;
public:
    C(std::shared_ptr<A> a, std::shared_ptr<B> b) : a_(a), b_(b){}
    void doSomething() override {
    }
};

int main(int argc, char *argv[]) {

    const auto injector = di::make_injector(
            di::bind<IA>.to<A>(),
            di::bind<IB>.to<B>(),
            di::bind<IC>.to<C>()
    );
    auto test = injector.create<IC>();
}

以下是我的详细编译错误:

错误 C2672: 'boost::ext::di::v1_2_0::core::injector<TConfig,boost::ext::di::v1_2_0::core::poolboost::ext::di::v1_2_0:: aux::type_list<>,boost::ext::di::v1_2_0::core::dependency<TScope,TExpected,T,TName,TPriority,TCtor>,boost::ext::di::v1_2_0::core ::dependency<TScope,IB,B,TName,TPriority,TCtor>,boost::ext::di::v1_2_0::core::dependency<TScope,IC,C,TName,TPriority,TCtor>>::create ': 没有找到匹配的重载 function 与 [ TConfig=boost::ext::di::v1_2_0::config, TScope=boost::ext::di::v1_2_0::scopes::deduce, TExpected=IA, T= A、TName=boost::ext::di::v1_2_0::no_name, TPriority=void, TCtor=boost::ext::di::v1_2_0::core::none]

错误 C2770:'T boost::ext::di::v1_2_0::core::injector<TConfig,boost::ext::di::v1_2_0::core::poolboost:: 的显式模板参数无效ext::di::v1_2_0::aux::type_list<>,boost::ext::di::v1_2_0::core::dependency<TScope,TExpected,T,TName,TPriority,TCtor>,boost::ext ::di::v1_2_0::core::dependency<TScope,IB,B,TName,TPriority,TCtor>,boost::ext::di::v1_2_0::core::dependency<TScope,IC,C,TName ,TPriority,TCtor>>::create(void) const' 与 [ TConfig=boost::ext::di::v1_2_0::config, TScope=boost::ext::di::v1_2_0::scopes::deduce , TExpected=IA, T=A, TName=boost::ext::di::v1_2_0::no_name, TPriority=void, TCtor=boost::ext::di::v1_2_0::core::none ]

注意:见 'boost::ext::di::v1_2_0::core::injector<TConfig,boost::ext::di::v1_2_0::core::poolboost::ext::di::v1_2_0 的声明::aux::type_list<>,boost::ext::di::v1_2_0::core::dependency<TScope,TExpected,T,TName,TPriority,TCtor>,boost::ext::di::v1_2_0: :core::dependency<TScope,IB,B,TName,TPriority,TCtor>,boost::ext::di::v1_2_0::core::dependency<TScope,IC,C,TName,TPriority,TCtor>>: :create' with [ TConfig=boost::ext::di::v1_2_0::config, TScope=boost::ext::di::v1_2_0::scopes::deduce, TExpected=IA, T=A, TName= boost::ext::di::v1_2_0::no_name, TPriority=void, TCtor=boost::ext::di::v1_2_0::core::none]

任何想法我做错了什么?

你调用是错误的,它应该类似于:

auto test = injector.create<std::unique_ptr<IC>>();

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM