IoC 容器类中的类型推断,解析方法的返回类型

问题描述 投票:0回答:0

我有一个简单的 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)?

python dependency-injection type-inference ioc-container
© www.soinside.com 2019 - 2024. All rights reserved.