python的依赖注入。

kink的Python项目详细描述


扭结Build Statuscodecov

python依赖注入

特点

  • 易于使用的界面
  • 可通过自定义依赖关系解析程序进行扩展
  • 自动依赖注入
  • 轻量级
  • 支持async with asyncio

安装

pip install kink

使用

将服务添加到依赖注入容器

依赖容器是dict-like对象,向依赖容器添加新服务 简单如下:

^{pr2}$

将服务工厂添加到依赖注入容器

Kink还支持按需创建服务。为了定义这样的服务,lambda函数 应使用:

fromkinkimportdifromsqlite3importconnectdi["db_connection"]=lambdadi:connect(di["db_name"])

在这种情况下,除非请求服务,否则不会建立到数据库的连接。在

从m依赖注入容器请求服务

fromkinkimportdifromsqlite3importconnect# Setting servicesdi["db_name"]="test_db.db"di["db_connection"]=lambdadi:connect(di["db_name"])# Getting serviceconnection=di["db_connection"]# will return instance of sqlite3.Connectionassertconnection==di["db_connection"]# True

自动关联依赖项

fromkinkimportdi,injectfromsqlite3importconnect,Connectiondi["db_name"]="test_db.db"di["db_connection"]=lambdadi:connect(di["db_name"])# Inject connection from di, connection is established once function is called.@injectdefget_database(db_connection:Connection):...connection=get_database()connection_with_passed_connection=get_database(connect("temp.db"))# will use passed connection

构造函数注入

fromkinkimportinject,diimportMySQLdb# Set dependenciesdi["db_host"]="localhost"di["db_name"]="test"di["db_user"]="user"di["db_password"]="password"di["db_connection"]=lambdadi:MySQLdb.connect(host=di["db_host"],user=di["db_user"],passwd=di["db_password"],db=di["db_name"])@injectclassAbstractRepository:def__init__(self,db_connection):self.connection=db_connectionclassUserRepository(AbstractRepository):...repository=UserRepository()repository.connection# mysql db connection is resolved and available to use.

当类被inject注释注释时,它将被自动添加到容器中以备将来使用(例如autowiring)。在

服务别名

@injectdecorator注册服务时,可以附加自己的别名,请考虑以下示例:

fromkinkimportinjectfromtypingimportProtocolclassIUserRepository(Protocol):...@inject(alias=IUserRepository)classUserRepository:...assertdi[IUserRepository]==di[UserRepository]# returns true

有关更多示例,请检查tests目录

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java+Brave+Zipkin:问题是,跟踪总是一样的   swing能否取消Java中的特定TimerTask?   java以编程方式重新运行失败的TestNG测试   java DefaultMessageListenerContainer未从IBM MQ读取消息   使循环结果显示在一个数组到一个数组中。Java中的toString   tomcat java。lang.NoClassDefFoundError在对GlassFish/Payara部署战争时出错   Java中的增量算法   Java中lambda类的类名是什么意思?   java图像url无法加载安卓 Imageview实际图像为“PNG”格式   java如何使用JPA使库对象数据库持久化?   java如何让onClickListener从另一个活动接收意图信息   运行时如何使Java程序反复启动   java如何在Spring上的ApacheCamel中一开始就并行运行两条路由?   java如何使用SeleniumWebDriver从以下div获取文本   将Google电子表格API与JAVA一起使用时,引用中的excel公式单元格值未更新   fileinputstream如何在Java中读/写HashMap对象到文件?   使用java调用Postgresql的过程   仅在集合中使用java方法