std::shared_ptr< typename RegistrationBuilder< T, RegistrationStyleT >::ParentType >
 RegistrationBuilder< T, RegistrationStyleT >::instancePerDependency()
 {
     auto& rd = registrationData();
     rd.sharing(InstanceSharing::None);
     rd.lifetime(std::make_shared< CurrentLifetimeScope >());
     return this->shared_from_this();
 }
 typename RegistrationBuilder< T, RegistrationStyleT >::ParentType&
 RegistrationBuilder< T, RegistrationStyleT >::instancePerLifetimeScope()
 {
     auto& rd = registrationData();
     rd.sharing(InstanceSharing::Shared);
     rd.lifetime(std::make_shared< CurrentLifetimeScope >());
     return *this;
 }
 std::shared_ptr< typename RegistrationBuilder< T, RegistrationStyleT >::ParentType >
 RegistrationBuilder< T, RegistrationStyleT >::singleInstance()
 {
     auto& rd = registrationData();
     rd.sharing(InstanceSharing::Shared);
     rd.lifetime(std::make_shared< RootScopeLifetime >());
     return this->shared_from_this();
 }
Example #4
0
typename ContainerBuilder::RegistrationBuilderInterface< T >::Type&
ContainerBuilder::registerInstance(const std::shared_ptr< T >& instance)
{
    static_assert(!std::is_pod< T >::value || std::is_empty< T >::value || std::is_class< T >::value,
                  "ContainerBuilder::registerType< T >(std::shared_ptr< T > instance) is incompatible with POD types.");

    auto rb = RegistrationBuilderFactory< ContainerBuilder::RegistrationBuilderInterface >::forInstance(instance);

    rb->singleInstance();

    registerCallback(
        [rb](const std::shared_ptr< IComponentRegistry >& cr)
    {
        auto rootScopeLifetime = std::dynamic_pointer_cast< RootScopeLifetime >(rb->registrationData().lifetime());
        if (rootScopeLifetime == nullptr || rb->registrationData().sharing() != InstanceSharing::Shared)
            throw std::logic_error("Instance registration is single instance only.");

        RegistrationBuilderFactory< ContainerBuilder::RegistrationBuilderInterface >::registerSingleComponent< T >(cr, rb);
    });

    return *rb;
}