Skip to main content

依赖注入和控制和库的反转,用于简单的服务处理

项目描述

IOCynergy

使用依赖注入的 IOC 容器的 Python 模块(使用 python 3+ 类型提示,支持到 Python3.7)

初始化服务的简单方法

from cynergy import container

class TestClass:
    pass

class ParentClass:
    def __init__(self, test_class: TestClass):
        self.test_class = test_class

instance = container.get(ParentClass)  # Returns TestClass initialized as singleton

print(type(instance))  # ParentClass
print(type(instance.test_class))  # TestClass

从任何服务访问您的配置

from cynergy import container
from cynergy.config import Config, MemoryConfig
from cynergy.attributes import arguments

@arguments(db=Config('db_name'),host=Config('hostname'))
class DbConnector:
    def __init__(self, db: str, host: str):
        self.db = db
        self.host = host

container.initialize(MemoryConfig({
    "db_name": "LocalDbName",
    "hostname": "localhost"
}))

instance = container.get(DbConnector)

print(instance.db)  # LocalDbName
print(instance.host)  # localhost

** 您可以实现自己的配置提供程序(例如,您可以创建 DbConfigProvider 从数据库提供您的设置)

手动注册特殊类型

from cynergy import container

class Original:
    pass

class Other:
    pass

container.register_class(Original, Other)

instance = container.get(Original)

print(type(instance))  # Other

注册服务集合

from typing import List
from cynergy import container

class HandlerBase:
    pass

class SomeHandler1(HandlerBase):
    pass

class SomeHandler2(HandlerBase):
    pass

class SomeService:
    def __init__(self, handlers: List[HandlerBase]):
        self.handlers = handlers

container.register_many(HandlerBase, [SomeHandler1, SomeHandler2])

instance = container.get(SomeService)

print(type(instance.handlers))  # list
print(type(instance.handlers[0]))  # SomeHandler1
print(type(instance.handlers[1]))  # SomeHandler2

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

cynergy-1.2.0.tar.gz (7.3 kB 查看哈希)

已上传 source

内置分布

cynergy-1.2.0-py3-none-any.whl (7.3 kB 查看哈希)

已上传 py3