Skip to content

Multibind should respect the @singleton decorator #298

@davidparsson

Description

@davidparsson

A failing test case:

def test_multibind_respects_the_singleton_decorator() -> None:
    @singleton
    class SingletonPlugin(Plugin):
        pass

    def configure(binder: Binder) -> None:
        binder.bind(Plugin, to=SingletonPlugin)
        binder.multibind(List[Plugin], to=SingletonPlugin)
        binder.multibind(List[Plugin], to=[SingletonPlugin])
        binder.multibind(Dict[str, Plugin], to={'singleton1': SingletonPlugin, 'singleton2': SingletonPlugin})

    injector = Injector([configure])
    plugin_singleton = injector.get(Plugin)
    plugins_list = injector.get(List[Plugin])
    plugins_dict = injector.get(Dict[str, Plugin])

    assert plugin_singleton is injector.get(Plugin)
    assert plugins_list[0] is plugins_list[1]  # Fails
    assert plugins_dict['singleton1'] is plugins_dict['singleton2']  # Fails

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions