Swinject:使用元类型列表进行解析



我正在尝试创建一个函数来返回一个元类型数组,然后我可以使用它来解析来自 SwinjectResolver的实例。这是我的代码:

protocol Task: class { }
func getTypes() -> [Task.Type] {
return [ConcreteTaskA.self, ConcreteTaskB.self]
}
var concreteTasks = [Task]()
for type in getTypes() {
// Use a Swinject Container to resolve the metatype.
let task = container.resolver.resolve(type)! // Error here: Cannot invoke 'resolve' with an argument list of type '(Task.Type)'
concreteTasks.append(task)
}

我不知道如何解决这个问题。我是否需要以某种方式在getTypes()方法中使用泛型?解析时是否需要调用等效的type.self

我的要求是我可以定义一个元类型([ConcreteTaskA.self, ConcreteTaskB.self](列表,由解析器解析。

因此,事实证明问题可能在于使用协议。我可以让以下内容工作...

for type in getTypes() {
// Use a Swinject Container to resolve the metatype.
if let aType = type as? ConcreteTaskA.Type {
let task = container.resolver.resolve(aType)!
concreteTasks.append(task)
}
}

。但显然,不需要先检查每种类型会很好。

但是,如果我们将协议更改为基类,则一切将按预期工作:

class Task { }
class ConcreteTaskA: Task { }
class ConcreteTaskB: Task { }
func getTypes() -> [Task.Type] {
return [ConcreteTaskA.self, ConcreteTaskB.self]
}
var concreteTasks = [Task]()
for type in getTypes() {
// Use a Swinject Container to resolve the metatype.
let task = container.resolver.resolve(type)!
concreteTasks.append(task)
}

相关内容

  • 没有找到相关文章

最新更新