Skip to content

Explicit dependencies

Yohan edited this page May 11, 2017 · 2 revisions
class ITransport;

class SocketTransport : public ITransport;

class PersistentTransport : public ITransport
{
public:
   explicit PersistentTransport(const std::shared_ptr< ITransport >& transport);
};

Using a type

builder.registerType< SocketTransport >();

builder.registerType< PersistentTransport >()
       .with< ITransport, SocketTransport >()
       .as< ITransport >();

By using with, we tell the container to use SocketTransport when it is asked to resolve an ITransport in the context of the constructor of PersistentTransport.

Using an instance

auto socketTransport = std::make_shared< SocketTransport >();

builder.registerType< PersistentTransport >()
       .with< ITransport >(socketTransport)
       .as< ITransport >();

This is another way to use with by providing an instance.

Using an instance factory

builder.registerType< SocketTransport >();

builder.registerType< PersistentTransport >()
       .with< ITransport >([](ComponentContext& context)
        {
            return context.resolve< SocketTransport >();
        }
       .as< ITransport >();

All of these methods are equivalent, it is just different flavors for different needs.