我有一个简单的 IoC 类实现:
Abs = TypeVar('Abs', str, Type)
class MyContainer:
_bindings: dict = {}
_aliases: dict = {}
def resolve(abstract: Abs):
# something along these lines...
abstract = (
self._aliases[abstract]
if isinstance(abstract, str)
else abstract
)
factory = self._bindings.get(abstract)
return factory()
def bind(abstract: Type, factory: typing.Callable, alias: str = None) -> None:
# something along these lines...
self._bindings[abstract] = factory
if alias:
self._aliases[alias] = abstract
我这样使用它:
ioc = MyContainer()
def some_factory():
return SomeConcrete()
ioc.bind(SomeAbstract, some_factory, alias="some")
# Both work nice!
ioc.resolve(SomeAbstract)
ioc.resolve("some")
现在我想知道是否有办法让我的编辑器能够判断调用
ioc.resolve
的返回类型是什么,而不管我使用什么类型的 abstract
(Type 或 str)?