DefaultServiceProvider#

class DefaultServiceProvider : public sb::di::IServiceProvider#

Subclassed by sb::di::details::DefaultServiceProviderRoot

Public Types

using Ptr = std::unique_ptr<DefaultServiceProvider>#

Public Functions

DefaultServiceProvider(IServiceProviderRoot &root, ServiceProviderOptions options)#
DefaultServiceProvider(const DefaultServiceProvider&) = delete#
DefaultServiceProvider(DefaultServiceProvider&&) = delete#
DefaultServiceProvider &operator=(const DefaultServiceProvider&) = delete#
DefaultServiceProvider &operator=(DefaultServiceProvider&&) = delete#
virtual IServiceProvider::Ptr createScope() override#

Create a scoped service provider.

Scoped service provider creates/holds its own scoped services

Example:

auto provider = ServiceCollection{}.addScoped<TestClass>().buildServiceProvider();
auto scoped = provider->createScope();

&scoped->getService<TestClass>() != &provider->getService<TestClass>(); // True

virtual const IServiceInstance *tryGetInstance(TypeId serviceTypeId) override#

Returns service instance pointner, might be null.

If service was not registered or was registered as transient, method returns null

Example:

auto provider = ServiceCollection{}.addScoped<TestClass>().buildServiceProvider();

IServiceInstance * instance = provider->tryGetInstance(typeid(TestClass));
Attention

It is advised to use tryGetService<T> method istead

virtual const IServiceInstance &getInstance(TypeId serviceTypeId) override#

Returns service instance reference, might throw exception.

If service was not registered or was registered as transient, method throws exception

Example:

auto provider = ServiceCollection{}.addScoped<TestClass>().buildServiceProvider();

const IServiceInstance & instance = provider->getInstance(typeid(TestClass));
Attention

It is advised to use getService<T> method istead

Throws:

ServiceNotFoundException – service was not found

virtual std::vector<const IServiceInstance*> getInstances(TypeId serviceTypeId) override#

Returns service instances.

If service was not registered or was registered as transient, method returns empty vector

Example:

auto provider = ServiceCollection{}
             .addScoped<ITestClass, TestClass1>()
             .addScoped<ITestClass, TestClass2>()
             .buildServiceProvider();

std::vector<const IServiceInstance *> instances = provider->getInstances(typeid(ITestClass));
Attention

It is advised to use getServices<T> method istead

virtual IServiceInstance::Ptr tryCreateInstance(TypeId serviceTypeId) override#

Creates service instance unique pointner, might be null.

If service was not registered or was registered as scoped/transient, method returns null

Example:

auto provider = ServiceCollection{}.addTransient<TestClass>().buildServiceProvider();

std::unique_ptr<IServiceInstance> instance = provider->tryCreateInstance(typeid(TestClass));
Attention

It is advised to use tryCreateService<T> method istead

virtual IServiceInstance::Ptr createInstance(TypeId serviceTypeId) override#

Creates service instance unique pointner, might throw exception.

If service was not registered or was registered as scoped/transient, method throws exception

Example:

auto provider = ServiceCollection{}.addTransient<TestClass>().buildServiceProvider();

std::unique_ptr<IServiceInstance> instance = provider->createInstance(typeid(TestClass));
Attention

It is advised to use createService<T> method istead

Throws:

ServiceNotFoundException – service was not found

virtual std::vector<IServiceInstance::Ptr> createInstances(TypeId serviceTypeId) override#

Creates service instances.

If service was not registered or was registered as scoped/transient, method returns empty vector

Example:

auto provider = ServiceCollection{}
             .addTransient<ITestClass, TestClass1>()
             .addTransient<ITestClass, TestClass2>()
             .buildServiceProvider();

std::vector<std::unique_ptr<IServiceInstance>> instances = provider->createInstances(typeid(ITestClass));
Attention

It is advised to use createServices<T> method istead

void clear()#