Swinject:生成任何对象的实例(对于未注册的对象、ViewModel 等...)
Posted
技术标签:
【中文标题】Swinject:生成任何对象的实例(对于未注册的对象、ViewModel 等...)【英文标题】:Swinject: generate instances of any object (for not registered object, ViewModel, etc...) 【发布时间】:2018-04-03 08:29:05 【问题描述】:是否可以解决/创建未在 Swinject 容器中注册的新对象实例?在 Unity 的 c#(来自 Microsoft)的依赖注入中就是这样。
我想解析对某些协议有依赖性的 viewModel 类。 例如: 我已经在容器中注册了 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 为零
【问题讨论】:
【参考方案1】:不,Swinject 无法推断您希望使用哪种初始化方法来实例化AwesomeViewModel
。您需要先明确定义它:
container.register(AwesomeViewModel.self)
AwesomeViewModel(fileManager: $0.resolve(IFileManager.self)!)
诚然,如果您的类具有许多依赖项,这可能会变得非常麻烦。如果这成为问题,我建议您查看SwinjectAutoregistration 扩展。它使您可以编写:
container.autoregister(AwesomeViewModel.self, initializer: AwesomeViewModel.init)
【讨论】:
以上是关于Swinject:生成任何对象的实例(对于未注册的对象、ViewModel 等...)的主要内容,如果未能解决你的问题,请参考以下文章