Skip to content
Yohan edited this page May 12, 2017 · 2 revisions

Inheriting from ContainerBuilder

It is perfectly sane to provide a ContainerBuilder by module.

So you would write something like this:

class BusContainerBuilder : public ContainerBuilder
{
public:
    BusContainerBuilder
    {
        registerType< BusConfiguration >()
            .as< Configuration::IConfiguration >()
            .asSelf()
            .singleInstance();

        registerType< Serialization::MessageSerializer >()
            .as< Serialization::IMessageSerializer >()
            .singleInstance();

        registerType< Transport::ZmqTransport >().singleInstance();

        registerType< Persistence::PersistentTransport >()
            .with< Transport::ITransport, Transport::ZmqTransport >()
            .as< Persistence::IPersistentTransport >()
            .as< Transport::ITransport >()
            .singleInstance();

        registerType< Core::Bus >()
            .as< IBus >()
            .as< Dispatch::IMessageDispatchFactory >()
            .singleInstance();
    }
};

and then somewhere at the beginning of your application:

void initialize(ContainerBuilder& builder)
{
    builder.addRegistrations(BusContainerBuilder());
}

addRegistrations allows to merge registrations from one ContainerBuilder to another.

Updating a container

A container can be updated by using a ContainerBuilder.

ContainerBuilder builder;

// register some types, etc.

builder.updateContainer(*container);