Closed roytseng-tw closed 1 year ago
from kink import di di['a'] = None di['a'] # <-- Raise Service Error
Object None is used to tell if a service is registered or not. This is why a service registered with the value None is treated as not registered. Container.__getitem__ https://github.com/kodemore/kink/blob/master/kink/container.py#L34-L35 https://github.com/kodemore/kink/blob/master/kink/container.py#L40-L41 Container._get https://github.com/kodemore/kink/blob/master/kink/container.py#L55-L56
None
Container.__getitem__
Container._get
Define another sentinel object for this purpose.
MISSING = object() # in `Container.__getitem__` if service is not MISSING: return service # in `Container._get` if key not in self._services: return MISSING
@roytseng-tw Fixed in https://github.com/kodemore/kink/pull/39
Reproduce
Reason
Object
None
is used to tell if a service is registered or not. This is why a service registered with the valueNone
is treated as not registered.Container.__getitem__
https://github.com/kodemore/kink/blob/master/kink/container.py#L34-L35 https://github.com/kodemore/kink/blob/master/kink/container.py#L40-L41Container._get
https://github.com/kodemore/kink/blob/master/kink/container.py#L55-L56Proposal
Define another sentinel object for this purpose.