是否可以解决/创建一个新的对象的定局,而不是在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)