Added cache

This commit is contained in:
2025-09-24 12:05:04 +02:00
parent c71a3df62c
commit a1cfe76047
5 changed files with 131 additions and 3 deletions

View File

@@ -2,6 +2,7 @@ from typing import Union, Type, Callable, Self
from cpl.core.log.logger_abc import LoggerABC
from cpl.core.typing import T, Service
from cpl.core.utils.cache import Cache
from cpl.dependency.service_descriptor import ServiceDescriptor
from cpl.dependency.service_lifetime_enum import ServiceLifetimeEnum
from cpl.dependency.service_provider import ServiceProvider
@@ -96,3 +97,7 @@ class ServiceCollection:
for wrapper in WrappedLogger.__subclasses__():
self.add_transient(wrapper)
return self
def add_cache(self, t: Type[T]):
self._service_descriptors.append(ServiceDescriptor(Cache(t=t), ServiceLifetimeEnum.singleton, Cache[t]))
return self

View File

@@ -37,8 +37,23 @@ class ServiceProvider(ServiceProviderABC):
self._scope: Optional[ScopeABC] = None
def _find_service(self, service_type: type) -> Optional[ServiceDescriptor]:
origin_type = typing.get_origin(service_type) or service_type
type_args = list(typing.get_args(service_type))
for descriptor in self._service_descriptors:
if descriptor.service_type == service_type or issubclass(descriptor.base_type, service_type):
descriptor_base_type = typing.get_origin(descriptor.base_type) or descriptor.base_type
descriptor_type_args = list(typing.get_args(descriptor.base_type))
if descriptor_base_type == origin_type and len(descriptor_type_args) == 0 and len(type_args) == 0:
return descriptor
if descriptor_base_type != origin_type or len(descriptor_type_args) != len(type_args):
continue
if descriptor_base_type == origin_type and type_args != descriptor_type_args:
continue
if descriptor.service_type == origin_type or issubclass(descriptor.base_type, origin_type):
return descriptor
return None
@@ -158,7 +173,6 @@ class ServiceProvider(ServiceProviderABC):
return implementation
def get_service_type(self, service_type: Type[T]) -> Optional[Type[T]]:
for descriptor in self._service_descriptors:
if descriptor.service_type == service_type or issubclass(descriptor.service_type, service_type):

View File

@@ -86,7 +86,7 @@ class ServiceProviderABC(ABC):
"""
@abstractmethod
def get_service_type(self,instance_type: Type[T]) -> Optional[Type[T]]:
def get_service_type(self, instance_type: Type[T]) -> Optional[Type[T]]:
r"""Returns the registered service type for loggers
Parameter