🔧 依赖注入支持同步函数注入

This commit is contained in:
洛水居室 2022-07-31 01:28:10 +08:00
parent b70e50133b
commit ed5da75c00
No known key found for this signature in database
GPG Key ID: C9DE87DA724B88FC

View File

@ -6,11 +6,8 @@ from model.types import Func
from utils.app.manager import ServiceDict from utils.app.manager import ServiceDict
def inject(func: Func) -> Func: def get_injections(func: Func):
"""依赖注入""" injections = {}
@wraps(func)
async def decorator(*args, **kwargs):
try: try:
signature = inspect.signature(func) signature = inspect.signature(func)
except ValueError as exception: except ValueError as exception:
@ -26,8 +23,26 @@ def inject(func: Func) -> Func:
class_name = annotation.__name__ class_name = annotation.__name__
param = ServiceDict.get(class_name) param = ServiceDict.get(class_name)
if param is not None: if param is not None:
kwargs.setdefault(parameter_name, param) injections.setdefault(parameter_name, param)
return injections
def inject(func: Func) -> Func:
"""依赖注入"""
@wraps(func)
async def async_decorator(*args, **kwargs):
injections = get_injections(func)
kwargs.update(injections)
return await func(*args, **kwargs) return await func(*args, **kwargs)
return decorator @wraps(func)
def sync_decorator(*args, **kwargs):
injections = get_injections(func)
kwargs.update(injections)
return func(*args, **kwargs)
if inspect.iscoroutinefunction(func):
return async_decorator
else:
return sync_decorator