BeeHive icon indicating copy to clipboard operation
BeeHive copied to clipboard

是否考虑引入相应的DI框架?

Open xilin opened this issue 6 years ago • 6 comments

目前的实现里只能通过createService拿到protocol的实现实例,里面只会调用init或者shareInstance

未来会不会考虑引入类似 https://github.com/appsquickly/Typhoon 这样的DI框架丰满下注入功能?

xilin avatar Sep 26 '17 08:09 xilin

或者说有没有更好的办法来注入参数?目前看起来只能暴露property来设置,或者额外提供一个手动调用的注入方法?

一个设想是提供一个createService:configuration:方法,在实现类中提供一个宏定义注入点,在configuration中设置注入。

xilin avatar Sep 26 '17 08:09 xilin

不错的想法,欢迎pull request

SoXeon avatar Oct 11 '17 12:10 SoXeon

@xilin 我最近在将 Beehive 也注意到这个问题,是个缺陷,但是也可以通过一个单独的 service 对象来将工厂方法的逻辑放进去。 我自己这边目前在用 objection 作为 BeeHive 的 Service 的替代,相当于 BeeHive 只要 Module 部分,Service 部分就直接用依赖注入框架处理了

davidfuzju avatar Jan 20 '18 08:01 davidfuzju

@xilin 我想解决你说的问题可以分为三部: 1、给ServiceManager增加类似于createService:configuration:的方法,使调用环境可以传递给ServiceManager对应的Servive初始化环境context; 2、给ServiceProtocol基础协议增加类似于setupWithContext:的方法,由createService:configuration:完成Service实例化之后,测试Service是否支持context条件初始化方法,如果支持协议方法,调用setupWithContext:,把外部调用的context传递给Service的协议方法。 3、具体实现Service协议接口的实体类,如果支持初始化参数,则实现setupWithContext:方法,接受参数context,并且按照context进行条件初始化。 @SoXeon 你们会接受这样的PR吗?我觉得我可以补充一下这个功能,然后PR。 :)

MemoryReload avatar Jan 21 '18 06:01 MemoryReload

@MemoryReload 我觉得你这个方案比较轻量,可以很快的增加这个功能

xilin avatar Feb 25 '18 14:02 xilin

@SuperMarioBean 感谢分享思路,的确可以这样用BeeHive哈

xilin avatar Feb 25 '18 14:02 xilin