[Boost] .DI装饰模式

时间:2017-12-13 13:47:41

标签: c++ boost

是否可以使用[Boost] .DI库创建装饰器模式?

struct IFoo {};
struct Foo : IFoo { };

struct Decorator : IFoo
{
    explicit Decorator(shared_ptr<IFoo> foo) : foo(foo) {}

    shared_ptr<IFoo> foo;
};

auto injector = boost::di::make_injector(???);

如何设置进样器以使injector.create()返回一个有效的Decorator实例?

1 个答案:

答案 0 :(得分:0)

我使用带注释的构造函数注入和命名参数找到了解决方案,但是我可能会找到一个更优雅的解决方案。

auto decoratee = [] {};

namespace boost {
    namespace di {
        template<>
        struct ctor_traits<Decorator>
        {
            BOOST_DI_INJECT_TRAITS((named = decoratee) std::shared_ptr<IFoo>);
        };
    }
}

namespace di = boost::di;

auto injector = di::make_injector(
    di::bind<IFoo>().named(decoratee).to<Foo>(),
    di::bind<IFoo>().to<Decorator>());