0

是否可以解决/创建未在 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 为零

4

1 回答 1

1

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

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

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

container.autoregister(AwesomeViewModel.self, initializer: AwesomeViewModel.init)
于 2018-04-04T09:55:50.300 回答