# cpl_core.dependency_injection

## cpl_core.dependency_injection.service_collection

class `cpl_core.dependency_injection.service_collection.``ServiceCollection`(config: cpl_core.configuration.configuration_abc.ConfigurationABC)

  Bases: `cpl_core.dependency_injection.service_collection_abc.ServiceCollectionABC`

  Representation of the collection of services

  `add_db_context`(db_context_type: Type[cpl_core.database.context.database_context_abc.DatabaseContextABC], db_settings: cpl_core.database.database_settings.DatabaseSettings)

    Adds database context

    > db_context: Type[`cpl_core.database.context.database_context_abc.DatabaseContextABC`]

    >   Database context

  `add_logging`()

    Adds the CPL internal logger

  `add_scoped`(service_type: Type, service: Optional[Callable] = None)

    Adds a service with scoped lifetime

    > service_type: `Type`

    >   Type of the service

    > service: `Callable`

    >   Object of the service

  `add_singleton`(service_type: Union[type, object], service: Optional[Union[type, object]] = None)

    Adds a service with singleton lifetime

    > service_type: `Type`

    >   Type of the service

    > service: `Callable`

    >   Object of the service

  `add_transient`(service_type: type, service: Optional[type] = None)

    Adds a service with transient lifetime

    > service_type: `Type`

    >   Type of the service

    > service: `Callable`

    >   Object of the service

  `build_service_provider`() → cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC

    Creates instance of the service provider

    > Object of type `cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC`

## cpl_core.dependency_injection.service_collection_abc

class `cpl_core.dependency_injection.service_collection_abc.``ServiceCollectionABC`

  Bases: `abc.ABC`

  ABC for the class `cpl_core.dependency_injection.service_collection.ServiceCollection`

  abstract `add_db_context`(db_context: Type[cpl_core.database.context.database_context_abc.DatabaseContextABC])

    Adds database context

    > db_context: Type[`cpl_core.database.context.database_context_abc.DatabaseContextABC`]

    >   Database context

  abstract `add_logging`()

    Adds the CPL internal logger

  abstract `add_scoped`(service_type: Type, service: Optional[collections.abc.Callable] = None)

    Adds a service with scoped lifetime

    > service_type: `Type`

    >   Type of the service

    > service: `Callable`

    >   Object of the service

  abstract `add_singleton`(service_type: Type, service: Optional[collections.abc.Callable] = None)

    Adds a service with singleton lifetime

    > service_type: `Type`

    >   Type of the service

    > service: `Callable`

    >   Object of the service

  abstract `add_transient`(service_type: Type, service: Optional[collections.abc.Callable] = None)

    Adds a service with transient lifetime

    > service_type: `Type`

    >   Type of the service

    > service: `Callable`

    >   Object of the service

  abstract `build_service_provider`() → cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC

    Creates instance of the service provider

    > Object of type `cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC`

## cpl_core.dependency_injection.service_descriptor

class `cpl_core.dependency_injection.service_descriptor.``ServiceDescriptor`(implementation: Optional[Union[type, object]], lifetime: cpl_core.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum)

  Bases: `object`

  Descriptor of a service

  > implementation: Union[`type`, Optional[`object`]]

  >   Object or type of service

  > lifetime: `cpl_core.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum`

  >   Lifetime of the service

  property `implementation`
  property `lifetime`
  property `service_type`

## cpl_core.dependency_injection.service_lifetime_enum

class `cpl_core.dependency_injection.service_lifetime_enum.``ServiceLifetimeEnum`(value)

  Bases: `enum.Enum`

  An enumeration.

  `scoped` = 1
  `singleton` = 0
  `transient` = 2

## cpl_core.dependency_injection.service_provider

class `cpl_core.dependency_injection.service_provider.``ServiceProvider`(service_descriptors: list, config: cpl_core.configuration.configuration_abc.ConfigurationABC, db_context: Optional[cpl_core.database.context.database_context_abc.DatabaseContextABC])

  Bases: `cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC`

  Provider for the services

  > service_descriptors: list[`cpl_core.dependency_injection.service_descriptor.ServiceDescriptor`]

  >   Descriptor of the service

  > config: `cpl_core.configuration.configuration_abc.ConfigurationABC`

  >   CPL Configuration

  > db_context: Optional[`cpl_core.database.context.database_context_abc.DatabaseContextABC`]

  >   Database representation

  `build_service`(service_type: type) → object

    Creates instance of given type

    > instance_type: `Type`

    >   The type of the searched instance

    > Object of the given type

  `create_scope`() → cpl_core.dependency_injection.scope_abc.ScopeABC

    Creates a service scope

    > Object of type `cpl_core.dependency_injection.scope.Scope`

  `get_service`(service_type: type) → Optional[collections.abc.Callable[object]]

    Returns instance of given type

    > instance_type: `Type`

    >   The type of the searched instance

    > Object of type Optional[Callable[`object`]]

  `set_scope`(scope: cpl_core.dependency_injection.scope_abc.ScopeABC)

    Sets the scope of service provider

    > scope `cpl_core.dependency_injection.scope.Scope`

    >   Service scope

## cpl_core.dependency_injection.service_provider_abc

class `cpl_core.dependency_injection.service_provider_abc.``ServiceProviderABC`

  Bases: `abc.ABC`

  ABC for the class `cpl_core.dependency_injection.service_provider.ServiceProvider`

  abstract `build_service`(service_type: Type) → object

    Creates instance of given type

    > instance_type: `Type`

    >   The type of the searched instance

    > Object of the given type

  abstract `create_scope`() → cpl_core.dependency_injection.scope_abc.ScopeABC

    Creates a service scope

    > Object of type `cpl_core.dependency_injection.scope.Scope`

  abstract `get_service`(instance_type: Type) → Optional[collections.abc.Callable[object]]

    Returns instance of given type

    > instance_type: `Type`

    >   The type of the searched instance

    > Object of type Optional[Callable[`object`]]

  abstract `set_scope`(scope: cpl_core.dependency_injection.scope_abc.ScopeABC)

    Sets the scope of service provider

    > scope `cpl_core.dependency_injection.scope.Scope`

    >   Service scope