可插拔依赖注入和结果处理
项目描述
in-n-out
Python依赖注入,您值得拥有。
这是一个使用类型提示的轻量级Python依赖注入和结果处理框架。重点在于简单性、易用性和对源代码的最小影响。
import in_n_out as ino
class Thing:
def __init__(self, name: str):
self.name = name
# use ino.inject to create a version of the function
# that will retrieve the required dependencies at call time
@ino.inject
def func(thing: Thing):
return thing.name
def give_me_a_thing() -> Thing:
return Thing("Thing")
# register a provider of Thing
ino.register_provider(give_me_a_thing)
print(func()) # prints "Thing"
def give_me_another_thing() -> Thing:
return Thing("Another Thing")
with ino.register_provider(give_me_another_thing, weight=10):
print(func()) # prints "Another Thing"
这还支持处理返回值(注入有意外的副作用)
@ino.inject_processors
def func2(thing: Thing) -> str:
return thing.name
def greet_name(name: str):
print(f"Hello, {name}!")
ino.register_processor(greet_name)
func2(Thing('Bob')) # prints "Hello, Bob!"
替代品
存在许多其他Python DI框架,以下是一些可以考虑的替代品