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()#
-
using Ptr = std::unique_ptr<DefaultServiceProvider>#