免责声明:我还在学习Swift,如果我不了解Swift的某些概念/能力/限制,请原谅我。
使用Swinject框架,如果要将协议绑定到类 - 似乎必须在闭包中返回类实例,例如:
container.register(Animal.self) { _ in Cat() }
是否可以将两种类型传递给register()
方法并让框架为您实例化该类?它需要以递归方式查看该类是否具有任何初始化依赖项(控制反转)。
这在PHP世界中是可行的,因为您具有反射的概念,它允许您获取依赖项的类类型,允许您动态实例化它们。我想知道Swift是否有这种能力?
写这个会好得多:
container.register(Animal.self, Cat.self)
这也允许你解决容器中的任何类并解决它的依赖关系(无需手动注册类):
container.resolve(NotRegisteredClass.self)
注意:这仅适用于不将标量类型作为依赖项的类(因为它们当然需要明确给出)。
答案 0 :(得分:2)
第二种情况 - 解决没有显式注册的类型 - 目前是不可能的,因为Swift对反射的支持非常有限。
但是,有一个SwinjectAutoregistration扩展名,可以让您编写与第一个示例非常接近的内容:
container.autoregister(Animal.self, initializer: Cat.init)