【问题标题】:UWP / MVVMlight : Replacing Obsolete ServiceLocatorUWP / MVVMlight:替换过时的 ServiceLocator
【发布时间】:2019-08-13 08:48:36
【问题描述】:

我正在更新我的应用程序,现在我使用 MVVMLight 5.3.0 viewmodellocator 崩溃了

ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

我读到最新版本的 MVVMLight,类 servicelocartor 被删除,Microsoft.Practices.ServiceLocation 消失了......

那么,我可以/必须做什么才能让应用再次运行? 谢谢

【问题讨论】:

    标签: c# mvvm-light


    【解决方案1】:

    从介绍MVVMLight标准库版本的博文中,去掉下面这行代码:

    // OLD ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
    

    每当您使用 ServiceLocator.Current 时,请改用 SimpleIoc.Default。例如

    // OLD var nav = ServiceLocator.Current.GetInstance<INavigationService>();
    // NEW
    var nav = SimpleIoc.Default.GetInstance<INavigationService>();
    

    http://www.mvvmlight.net/std10

    【讨论】:

    【解决方案2】:

    我总是以这种方式使用 MVVMLight,而不为 ServiceLocator 设置定位器提供程序。通常,您的视图模型定位器应如下所示:

    public class ViewModelLocator
    {
        public ViewModelLocator()
        {
            SimpleIoc.Default.Register<IDataProvider, SQLiteDataProvider>();
            SimpleIoc.Default.Register<IDialogService, DialogService>();
            SimpleIoc.Default.Register(GetNavigationService);
            SimpleIoc.Default.Register<MainViewModel>();
            SimpleIoc.Default.Register<MessageViewModel>();
            SimpleIoc.Default.Register<SearchViewModel>();
            SimpleIoc.Default.Register<SettingViewModel>();
            ...
        }
    
        public MainViewModel MainViewModel => SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
        public MessageViewModel MessageViewModel => SimpleIoc.Default.GetInstance<MessageViewModel>(Guid.NewGuid().ToString());
        public SearchViewModel SearchViewModel => SimpleIoc.Default.GetInstance<SearchViewModel>(Guid.NewGuid().ToString());
        public SettingViewModel SettingViewModel => SimpleIoc.Default.GetInstance<SettingViewModel>(Guid.NewGuid().ToString());
        ...
    
        public INavigationService GetNavigationService()
        {
            var navigationService = new NavigationService();
            navigationService.Configure(Pages.MainView.ToString(), typeof(MainPage));
            navigationService.Configure(Pages.MessageView.ToString(), typeof(MessagePage));
            navigationService.Configure(Pages.SearchView.ToString(), typeof(SearchPage));
            navigationService.Configure(Pages.SettingView.ToString(), typeof(SettingPage));
            ...
            return navigationService;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多