MVVM 如何注册多个同类型的服务?
MvvmLight 的示例代码如下:
static ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
var nav = new NavigationService();
nav.Configure(SecondPageKey, typeof(SecondPage));
SimpleIoc.Default.Register<INavigationService>(() => nav);
SimpleIoc.Default.Register<IDialogService, DialogService>();
if (ViewModelBase.IsInDesignModeStatic
|| UseDesignTimeData)
{
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
}
else
{
SimpleIoc.Default.Register<IDataService, DataService>();
}
SimpleIoc.Default.Register<MainViewModel>();
}
public MainViewModel(
IDataService dataService,
INavigationService navigationService)
{
_dataService = dataService;
_navigationService = navigationService;
Initialize();
}
private async Task Initialize()
{
try
{
var item = await _dataService.GetData();
WelcomeTitle = item.Title;
}
catch (Exception ex)
{
// Report error here
WelcomeTitle = ex.Message;
}
}
问题是这个示例非常简单,只有 MainPage
使用了 DataService
,而我的应用有多个 Page
,对应有多个 ViewModel
,以及多个 DataService
DataService2
DataService3
DataService4
...
这些 DataService
供不同 ViewModel
使用,就如上面的代码一样,但我不能重复注册,因为 IDataService
已经被注册过。
...
// 错误
SimpleIoc.Default.Register<IDataService, DataService2>();
SimpleIoc.Default.Register<IDataService, DataService3>();
SimpleIoc.Default.Register<IDataService, DataService4>();
...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
用 SimpleIoc 追求的就是单例的效果,DataService 如果有多个就 不是单例,当让就不能用 以上这种方式了,在每个 ViewModel 实例化就行了