From 8821abdfd1e69aa065dd38eba81c8e29618ea8a2 Mon Sep 17 00:00:00 2001 From: 苏向夜 Date: Mon, 1 Apr 2024 11:06:17 +0800 Subject: fix(injector): fix injector error when complex subscrib annocation --- src/infini/injector.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/infini/injector.py b/src/infini/injector.py index 462664a8..73d96566 100644 --- a/src/infini/injector.py +++ b/src/infini/injector.py @@ -1,5 +1,6 @@ +import typing from infini.typing import Callable, T, Optional, Dict, Any -from typing import get_origin +from typing import get_args, get_origin import inspect @@ -19,9 +20,15 @@ class Injector: for param_name, param in signature.parameters.items(): default = None if param.default == inspect._empty else param.default if param_name in parameters: - if type(parameters[param_name]) != ( - get_origin(param.annotation) or param.annotation - ): + origin = get_origin(param.annotation) + if isinstance(origin, typing._SpecialForm): + param_types = get_args(param.annotation) + elif not origin: + param_types = (param.annotation,) + else: + param_types = (origin,) + + if type(parameters[param_name]) not in param_types: raise ValueError( f"Parameter with name '{param_name}' has a mismatch type, " f"expected '{param.annotation!r}' but got '{type(parameters[param_name])!r}'." -- cgit v1.2.3-70-g09d2