gpt4 book ai didi

swift - Swinject:生成任何对象的实例(对于未注册的对象、ViewModel 等...)

转载 作者:行者123 更新时间:2023-11-28 14:53:14 24 4
gpt4 key购买 nike

是否可以解决/创建未在 Swinject 容器中注册的对象的新实例?在 C#(来自 Microsoft)的 Unity 依赖注入(inject)中就是这样。

我想解析 viewModel 类,它依赖于某些协议(protocol)。例如:我已经在容器中注册了 IFileManager:

container.register(IFileManager.self) { _ in FileManager() }.inObjectScope(ObjectScope.container)

我的 viewModel 依赖于 IFileManager

class AwesomeViewModel{
init (fileManager: IFileManager) {
....
}}

现在我想使用 Swinject 解析器创建 AwesomeViewModel 的新实例,并且我希望将所有依赖项添加到 init,但它不起作用

viewModel = AppDelegate.container.resolve(AwesomeViewModel.self)

ViewModel 为零

最佳答案

不,Swinject 无法推断您希望使用哪种初始化方法来实例化 AwesomeViewModel。您需要先明确定义它:

container.register(AwesomeViewModel.self) {
AwesomeViewModel(fileManager: $0.resolve(IFileManager.self)!)
}

诚然,如果您的类具有很多依赖项,这可能会变得非常麻烦。如果这成为问题,我建议您查看 SwinjectAutoregistration扩大。它使您能够编写:

container.autoregister(AwesomeViewModel.self, initializer: AwesomeViewModel.init)

关于swift - Swinject:生成任何对象的实例(对于未注册的对象、ViewModel 等...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49625507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com