【发布时间】:2018-03-16 13:17:14
【问题描述】:
免责声明:我还在学习 Swift,如果我不了解 Swift 的某些概念/功能/限制,请见谅。
使用 Swinject 框架,如果您想将协议绑定到类 - 似乎您必须在闭包中返回类实例,例如:
container.register(Animal.self) { _ in Cat() }
是否可以改为将两种类型传递给register() 方法并让框架为您实例化该类?当然,它需要递归地查看该类是否具有任何初始化程序依赖项(控制反转)。
这在 PHP 世界中是可能的,因为您有反射的概念,它允许您获取依赖项的类类型,允许您即时实例化它们。不知道 Swift 有没有这个能力?
这样写会更好:
container.register(Animal.self, Cat.self)
这还允许您从容器中解析任何类并解决它的依赖关系(无需手动注册类):
container.resolve(NotRegisteredClass.self)
注意:这仅对不将标量类型作为依赖项的类有意义(因为它们当然需要明确给出)。
【问题讨论】:
标签: swift dependency-injection swinject