2017-12-13 8 views
0

[부스트] .DI 라이브러리로 데코레이터 패턴을 생성 할 수 있습니까?[부스트] .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의 유효한 인스턴스를 반환하도록 injector를 설정하는 방법은 무엇입니까?

답변

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>());