是否可以使用[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实例?
答案 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>());