在我看来,如何解决 XLabs 中的依赖关系有点令人困惑。
根据示例项目,这里是我注册依赖项的方式(简化):
1)平台依赖于MainActivity.cs:
private void SetIoc()
{
var resolverContainer = new SimpleContainer();
resolverContainer.Register<IMediaPicker, MediaPicker>();
Resolver.SetResolver(resolverContainer.GetResolver());
}
2) App.cs中的平台独立:
public App ()
{
DependencyService.Register<ISettings, Settings>();
DependencyService.Register<FooViewModel>();
}
现在,解决依赖关系相当困难。预期的方法是通过构造函数注入来解决,它以异常结束:
public FooViewModel(IMediaPicker picker) {} // Exception
public FooViewModel(ISettings settings) {} // Exception
另一种但不是最佳的方法是通过 DependencyService / Resover 解决。但在这里我需要知道我必须使用哪个:
public FooViewModel()
{
_picker = Resolver.Resolve<IMediaPicker>();
_settings = DependencyService.Get<ISettings>();
}
这一切对我来说似乎都不是最优的(例如单元测试)。有没有办法统一整个解析过程,最好是通过构造函数?