使用python实现的DI原型
来源:互联网 发布:apache maven怎么安装 编辑:程序博客网 时间:2024/06/04 00:20
使用python实现的DI原型
DI依赖注入是IoC控制反转的一种实现。
控制反转的思想不再赘述,以下是一个python实现的DI原型,实现了函数参数的注入
Code
# -*- coding: utf-8 -*-# 这是一个依赖注入的原型import inspect,datetime# 上下文context = {}# 注入def inject(func): def wrapper(*args, **kwargs): # 获取函数的参数名 argsName=inspect.getargspec(func).args # 根据参数名,从context获取实例 args=map(lambda name,value: context[name] if value is None else value,argsName,func.__defaults__) # 获取返回值 result = func(*args, **kwargs) return result return wrapper# 注册对象到上下文容器 def register(name,value): context[name]=value@injectdef welcome(username=None,date=None): print ("hello %s,time is %s"%(username,date))# 注册对象到容器register('date', datetime.datetime.today())register('username','suntao')welcome()
output
hello suntao,time is 2016-09-29 23:02:00.928413
IDEA
思路非常清晰明确简单
通过python的装饰器模拟动态代理
通过字典实现简单的上下文
通过inspect模块获取函数的参数名,再从context中获取实例,最后调用原函数
其他
简化的DI原型,所以非必要的部分都省去,如果读者有兴趣,可以考虑装饰类对象,实现更加完整的DI
如果看不明白code(with comments),可以自行学习相关模块,也是一种提升
python27和python34(35)都可以跑,用到的模块都是核心模块
源码托管在这里,可以参阅
0 0
- 使用python实现的DI原型
- Spring的DI注入实现
- Spring DI的配置使用
- Spring DI的配置使用
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- Spring框架源码学习---DI的实现
- spring DI 实现的模拟,依赖注入
- strcmp的实现原型
- 通讯录的原型实现(-)
- 扫描仪 ScanWizard DI的简单使用
- Dagger 依赖注入的使用(DI)
- Spring的DI使用XML方式
- Spring之DI的配置使用
- JavaScript使用原型实现继承时应注意的问题
- 应用Python快速实现系统原型
- python实现感知机(perceptron)原型~
- 二叉排序树的另一种原型实现
- JAVA 原型模式的实现
- 洛谷 P2038 无线网络发射器选址
- 欢迎使用CSDN-markdown编辑器
- 计算机视觉
- 依赖包后出现Failed to resolve: com.github.Aspsine:SwipeToLoadLayout:1.0.3错误
- swift中UITableView的使用(编辑模式)
- 使用python实现的DI原型
- spark性能调优二--JVM调优
- Timer and TimerTask
- 《Oracle相关文章索引(1)》
- TIM_OCPolarity pwm
- 洛谷 P2296 寻找道路
- 法律裁判文书的统计结果
- 分布式文件系统 FastDFS
- Apache POI操作Word概览