如何通过ios UIViewControllers注入依赖项

时间:2015-10-23 16:40:42

标签: ios objective-c swift uiviewcontroller dependency-injection

假设我有一个我在appDelegate中创建的NSObject的实例,那么使这个实例可用于我的一些UIViewControllers的最简单的可能性是什么。

我知道不同的方法,但它们都不能满足我的需求

  1. 我可以定义一个协议(MHSomeObjectDataSource)并让AppDelegate实现它。
  2. 在UIViewControllers(MSSomeObject)上保留属性,并在实例化UIViewControllers之后始终设置它
  3. 使对象成为单身 Nope有很多原因
  4. 我对1,2的主要问题是我必须手动确保设置了属性/委托。

    是否有一种方便的依赖注入方式,我还不知道呢?

1 个答案:

答案 0 :(得分:1)

有两种选择,其中一种可能适合您:

  • 如果以编程方式创建控制器,则可以使用基于构造函数的注入,并将这些依赖项作为指定初始化程序的必需参数传递。
  • 如果您不介意使用单例或全局可访问的IoC容器或依赖关系工厂,则可以使用子类在awakeFromNib或指定的初始值设定项中触发注入。
  • 同样,您可以将UIStoryboard子类化为覆盖instantiateViewControllerWithIdentifier并将依赖项注入视图控制器(再次假设故事板有一个很好的方法可以将它们放在首位)。
  • 如果您正在使用objective-c或obj-c兼容类型,您可能会受益于现有的DI框架,例如http://objection-framework.org/http://typhoonframework.org/

我认为https://www.objc.io/issues/15-testing/dependency-injection/对方法的讨论很好。