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

Swinject: generate instances of any object (for not registered object, ViewModel, etc...)

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

我想解析 viewModel class,它依赖于某些协议。 例如: 我已经在容器中注册了 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: [=10=].resolve(IFileManager.self)!)
}

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

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