Swift 中的简单容器绑定?



免责声明:我还在学习 Swift,所以如果我不了解 Swift 的某些概念/功能/局限性,请原谅我。

使用 Swinject 框架,如果您想将协议绑定到类 - 似乎您必须在闭包中返回类实例,例如:

container.register(Animal.self) { _ in Cat() }

是否可以将两种类型传递给register()方法并让框架为您实例化类?当然,它需要递归查看该类是否具有任何初始值设定项依赖项(控制反转)。

这在PHP世界中是可能的,因为您具有反射的概念,它允许您获取依赖项的类类型,从而允许您动态实例化它们。我想知道 Swift 是否有这种能力?

写这个会更好:

container.register(Animal.self, Cat.self)

这也允许您解析容器中的任何类并解析其依赖项(无需手动注册类):

container.resolve(NotRegisteredClass.self)

注意:这只对不将标量类型作为依赖项的类有意义(因为它们当然需要显式给出)。

第二种情况 - 在没有显式注册的情况下解析类型 - 目前是不可能的,因为 Swift 对反射的支持非常有限。

但是,有一个SwinjectAutoregistration扩展,它将使您能够编写非常接近第一个示例的内容:

container.autoregister(Animal.self, initializer: Cat.init)

最新更新