可以用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()返回一个有效的装饰器实例?
发布于 2017-12-13 21:47:41
我找到了使用带注释的构造函数注入和命名参数的解决方案,但我可能缺少一个更优雅的解决方案。
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>());https://stackoverflow.com/questions/47794568
复制相似问题