Document some of the Binder.bind() behavior

This commit is contained in:
Jakub Stasiak 2020-01-21 19:00:14 +01:00
parent fbbdbb1c61
commit e6d55adf6f
1 changed files with 28 additions and 1 deletions

View File

@ -420,13 +420,40 @@ class Binder:
) -> None: ) -> None:
"""Bind an interface to an implementation. """Bind an interface to an implementation.
Binding `T` to an instance of `T` like
::
binder.bind(A, to=A('some', 'thing'))
is, for convenience, a shortcut for
::
binder.bind(A, to=InstanceProvider(A('some', 'thing'))).
Likewise, binding to a callable like
::
binder.bind(A, to=some_callable)
is a shortcut for
::
binder.bind(A, to=CallableProvider(some_callable))
and, as such, if `some_callable` there has any annotated parameters they'll be provided
automatically without having to use :func:`inject` or :data:`Inject` with the callable.
`typing.List` and `typing.Dict` instances are reserved for multibindings and trying to bind them `typing.List` and `typing.Dict` instances are reserved for multibindings and trying to bind them
here will result in an error (use :meth:`multibind` instead):: here will result in an error (use :meth:`multibind` instead)::
binder.bind(List[str], to=['hello', 'there']) # Error binder.bind(List[str], to=['hello', 'there']) # Error
:param interface: Type to bind. :param interface: Type to bind.
:param to: Instance or class to bind to, or an explicit :param to: Instance or class to bind to, or an instance of
:class:`Provider` subclass. :class:`Provider` subclass.
:param scope: Optional :class:`Scope` in which to bind. :param scope: Optional :class:`Scope` in which to bind.
""" """