Skip to main content

hehey-hcontainer

介绍

hehey-hcontainer 是一个python di 容器,提供依赖注入等等功能

依赖以及版本要求

  • python >= 3.5

安装

  • 直接下载:

  • 命令安装:
pip install hehey-hcontainer

基础文件以目录

参数配置

from hcontainer.base.Definition import Definition
beanConf = {
    'class':'site.service.User.User', # 类路径
    '_single': True, # 是否单例,默认是单例,
    '_scope': 'app', # 对象作用域, app应用作用域,request 请求作用域
    '_init': 'init', # 初始化方法, 对象创建后调用设置的方法(设置属性完成后调用)
    '_args': [], # or True 构造方法参数,支持索引,关联数组
    '_attr': [], # 类其他属性,直接注入
    'attr1':'属性1',
    'attr2':'属性2',
    'attrBean':'<func::bean>',# 属性调用函数, 自动调用func函数(bean) 获取属性值,
    'addresstBean':'<ref::address|天收你>',# 属性对应另一个bean(user),| 之后为bean 的参数
    'attr3':Definition({
        '_ref':'user' # attr3 为另一个bean为user的对象
    })
}

基本示例

  • 快速使用
from hcontainer.bean import BeanManager
components = {
        # 构造器注入
        'user':{
            'clazz': 'site.service.User.User',
            '_args':[
                'hehe 小酌一杯'
            ],
        },

        # 属性注入
        'address':{
            'clazz':'site.service.Address.Address',
            'realName':'hehe',
            'user':'<ref::user>'
        },

}

beanManager = BeanManager.make(components);

# 获取bean 实例
user = beanManager.getBean('user')
address = beanManager.getBean('address')
  • 属性注入
from hcontainer.bean import BeanManager
class User:

    def __init__(self,**attrs):
    
        self.username = ''
        
        if attrs:
            #设置属性
            pass
            
        return ;

    def getUsername(self):

        return self.username
        
components = {
    # 构造器注入
    'user':{
        'clazz': 'site.service.User.User',
        'username':'hehe',
    },
}



beanManager = BeanManager.make(components);
user = beanManager.getBean('user')
  • 构造参数注入
# 示例1
class User:

    def __init__(self,**attrs):
    
        self.username = ''
        
        if attrs:
            #设置属性
            pass
        
        self._init();
        return ;
    
    def _init(self):
        # 初始化操作
        return;

    def getUsername(self):

        return self.username

# 此配置针对构造参数只有**attrs 
components = {
    # 构造器注入
    'user':{
        'clazz': 'site.service.User.User',
         '_args':True,
        'username':'hehe',
    },
}

# 示例2
class Address:

    def __init__(self,address='',city = ''):
        self.addr = address
        self.city = city
        self._user = None;

    @property
    def user(self):
        return self._user

components = {
    # 构造器注入
    'user':{
        'clazz': 'site.service.User.User',
        '_args':[
            '我的收货详细地址',
            '上海'
        ],
    },
}
  • bean 属性值为另一bean
from hcontainer.bean import BeanManager

class User:
    
    def __init__(self):
    
        self.username = ''
        self.address = None;
        return ;
    
    def getAddress(self):

        return self.address

class Address:
    def __init__(self,address='',city = ''):
        self.addr = address
        self.city = city

    def getAddr(self):
        return self.addr

components = {
        'user':{
            'clazz': 'site.service.User.User',
            'username':"hehe 小酌一杯",
            'address':'<ref::address>'
        },

        # 属性注入
        'address':{
            'clazz':'site.service.Address.Address',
            'address':'深圳',
            'city':'上海',
        }
}

beanManager = BeanManager.make(components);
user = beanManager.getBean('user')
address = user.getAddress()
address.getAddr()
  • 初始化方法(对象创建后,自动调用指定的方法)
class User:

    def __init__(self,**attrs):
    
        self.username = ''
        
        if attrs:
            #设置属性
            pass
        
        self._init();
        return ;
    
    def _init(self):
        # 初始化操作
        print("初始化对象自动调用此方法!")
        return;

    def getUsername(self):

        return self.username

components = {
    # 构造器注入
    'user':{
        'clazz': 'site.service.User.User',
        '_init':"_init",
        'username':'hehe',
    },
}
  • 装饰器注解(id,ref)类为bean 对象
from hcontainer.bean import BeanManager
from hcontainer import bean

@bean.id("addrbean")
class Address:

    def __init__(self,address=''):
        self.addr = address

    def getAddr(self):
        return self.addr

@bean.id("userbean")
class User:

    def __init__(self,username = 'nnnn'):
        self.username = username
        self.__address = None;
    
    @property
    @bean.ref('addrbean',name='__address')
    def address(self):
        return self.__address    

    def getName(self):

        return self.username

beanManager = BeanManager.make();
user = beanManager.getBean('user')
  • 创建新的bean 实例
from hcontainer.bean import BeanManager
components = {
    # 构造器注入
    'user':{
        'clazz': 'site.service.User.User',
        '_init':"_init",
        'username':'hehe',
    },
}

beanManager = BeanManager.make(components);
# 新对象,非单例
user = beanManager.makeBean('user')
  • 根据类路径创建bean 对象
from hcontainer.bean import BeanManager
beanManager = BeanManager.make();
user = beanManager.getBean('site.service.User.User')
  • bean 作用域

  • 创建bean容器
from hcontainer.bean import BeanManager
beanManager = BeanManager.make();
requestContainer = beanManager.makeContainer('request')
sessionContainer = beanManager.makeContainer('session')

Release files for hehey-hcontainer 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hehey-hcontainer 1.0.1
File Size Uploaded
hehey-hcontainer-1.0.1.tar.gz 14.2 kB Details

Release files / hehey-hcontainer-1.0.1.tar.gz

Download URL hehey-hcontainer-1.0.1.tar.gz
Size 14.2 kB
Tags Source
SHA-256 checksum
How to use checksums
690b4c292f0ea2862c95f81061bc9d8aecda568cadc31bb63d8ba1a7b2a8a043
BLAKE2b-256 checksum
How to use checksums
794a232a6dbfde598c250b2c38fe5675322862a755875290cd5cac17e7028315
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.6.0 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.6.8

Release history Release notifications | RSS feed

This release

1.0.1 This release

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page