解析符合协议的类和对象

时间:2015-12-15 13:01:39

标签: swift reflection dependency-injection swinject

我想传递符合某些协议的对象,并使用Swinject framwork解析其类型以进行分配(通过依赖注入)。

protocol IViewModelAware {
    typealias T
    var viewModel : T { get set }
}


class ViewAndViewModelCreator {
    var container : Container

    init(container : Container) {
        self.container = container
    }

    func resolveViewModel<T : IViewModelAware>(controller : T) {
        let mirror = Mirror(reflecting: controller.viewModel)
        let viewModelClassType = mirror.subjectType
        let viewModel = self.container.resolve(viewModelClassType.self) // This line shows error
        controller.viewModel = viewModel
    }

}

错误: 无法使用类型'(Any.Type)'

的参数列表调用'resolve'

如何从确认协议的对象中获取类,可能除了反射之外还有其他选项?

1 个答案:

答案 0 :(得分:0)

您可以通过controller.viewModel.dynamicType

从其实例中获取视图模型类的类型
func resolveViewModel<T : IViewModelAware>(controller : T) {
    let viewModel = container.resolve(controller.viewModel.dynamicType)
    // ...
}