swinject:生成任何对象的实例(对于未注册的对象,ViewModel等)



是否可以解决/创建一个新的对象的定局,而不是在Swinject容器中注册吗?在C#(来自Microsoft(的Unity依赖注入中。

我想解决对某些协议具有依赖性的ViewModel类。例如:我已经在容器中注册了IfileManager:

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

和我的ViewModel对IfileManager的依赖

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

现在,我想使用Swinject Resolver创建AwesomeViewModel的新实例,我希望将所有依赖项添加到Init,但它不起作用

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

和ViewModel是nil

否,Swinject无法推断您期望将哪种初始化方法用于AwesomeViewModel的实例化。您需要首先明确定义它:

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

诚然,如果您有许多依赖性的课程,这可能会很麻烦。如果这成为问题,建议您查看SwinjectauteAutoreGistration扩展。它使您能够写:

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

相关内容

  • 没有找到相关文章

最新更新