您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

IOS依赖注入和目标 《源码分享》

  • 时间:2022-08-20 00:52 编辑: 来源: 阅读:301
  • 扫一扫,手机访问
摘要:IOS依赖注入和目标 《源码分享》
由林西2020/05/01依赖注入创建首先解释一下什么是依赖注入。例如,一个控制器跳转到BController,那么BController需要在一个控制器内部进行实例化。以下@ implementation controller:uiview controller...-(void)jump { b controller * b controller =[[b controller alloc]init];[self . navigation controller pushview controller:b controller animated:YES];}@end如果这样做,AController封装成组件后,BController的配置将受到限制,任何BController的细节都不能从外部更改。所以我们* *稍微改成* * @ implementation controller:uiview controller...-(instance type)initwithcreateblock:(uiview controller *)(void))createBViewControllerBlock {....self . createBViewControllerBlock = createBViewControllerBlock;...}-(void)jump { uiview controller * b controller = self . createbviewcontrollerblock();[self . navigation controller pushview controller:b controller animated:YES];} @ end[[a controller alloc]initwithcreateblock:uiview controller * ^{ b controller * b controller =[[b controller alloc]initwith title:@ " XXX "];返回bController}];BController的创建是通过Block暴露的,AController并不关心BController是如何在内部创建的,所以AController对BController的依赖会通过外部Block注入。 这就是依赖注入。 当然,这是最简单的依赖注入,无法满足我们复杂的需求,所以有时候需要使用第三方框架,比如Objection和TyphoonObjection。接下来,我们来解释一下异议的用法。Objection是一个依赖注入框架,当你得到一个类的实例时,类内部的属性也会被实例化。 比如://Car.h@class发动机,Break@界面车:NSObject@property(非原子,强)Engine * engine@property(非原子,强)Break * breaks@ end//car . m # import & lt;反对/反对. & gt@ implementation car object _ requirements(@“engine”,@“breaks”)@ end创建默认注射器jsobjectioninjector * injector =[jsobjectioncreateinjector];[JSObjection setDefaultInjector:injector];实例化汽车对象car * car = [[JS异议默认注入器]getObject:[汽车类]];此时,从属引擎对象和breaks对象将实例化最后一个打印属性Car < Car:0x 6000006d 8480 & gt;引擎& lt引擎:0x6000004841b0 & gt中断& ltbreak:0x 6000004841 E0 & gt;如果Car对象不能被init或initWithXXX实例化,我们需要指定方法,这样注入器就可以在指定的方法中建立依赖关系@ implementationcarobject _ requirements(@“engine”)。@ " breaks ")-(void)awake from nib {[[JSObjection default injector]inject dependencies:self];}@end当汽车被注射器初始化时,会调用-awakefromobject方法,其中可以添加少量的value-(void)awakefrominjection { self . test = @ " 111 ";}以上都是init直接初始化的对象,但更多情况下我们需要指定构造方法@ implementation car object _ initializer _ sel(@ selector(init with object:)//这个宏只能出现一次——(instance type)init with object:(id)object { if(self =[super init]){ self . test = object;}回归自我;}@end拿出来的时候添加argumentList: parameter到car * car = [[JS异议默认注入器] getObject: [car class]参数列表:@[@ " AAAA "]];或者不想写object _ initializer _ sel()宏,可以直接在取数方法中修改,改成car * car = [[JS对象默认注入器] getobject: [car类]initializer:@ selector(initwithobject:)argument list:@[@ " AAAA "]];效果是一样的。在Car中添加一个对象工厂属性@ property (nonatomic,strong)js object factory * object factory;然后在标签注入中添加一个对象工厂object _ requirements(@“engine”,@“breaks”,@“object factory”),然后通过idobj = [self就可以得到了。对象工厂getobject:[引擎类]];获取相应的对象模块。可以创建一个继承自JSObjectionModule的模块,在里面绑定相应的东西,就可以直接得到协议、模块类等相应的值。该对象与类名和协议@ protocolapiservice绑定在一起 总结目标帮助您实现* *依赖注入* *。你只需要完成两件事,配置依赖关系和获取依赖对象。 配置依赖项时,可以使用几个常用的宏来快速完成依赖项的配置。此外,还可以利用模块的概念来完成更多的绑定操作。它允许您将某些类或某些协议接口绑定到某些或某些类型的对象。配置完成后,您可以使用key injector来获取您需要的对象。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部