UWP / MVVMlight:替换过时的ServiceLocator和SimpleIoc Register

时间:2017-11-27 21:57:29

标签: c# xaml uwp mvvm-light

我再次打开这个话题。

当我更新我的UWP应用程序时,我遇到了一个问题: 我将提供更多详细信息:这是我在更新之前的旧代码,在UWP / Win10 10240上完美运行 在我的app.xaml

<Application.Resources>
    <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</Application.Resources>

在我的App.xaml.cs

public class ViewModelLocator
{
    public const string MainMenuPageKey = "MainMenuPage";
    public const string QuestionPageKey = "QuestionPage";

    static ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        var nav = new NavigationService();
        nav.Configure(MainMenuPageKey, typeof(MainMenuPage));
        nav.Configure(QuestionPageKey, typeof(QuestionPage));

        SimpleIoc.Default.Register<INavigationService>(() => nav);
        SimpleIoc.Default.Register<IDialogService, DialogService>();
        SimpleIoc.Default.Register<IDataService, DataService>();

        SimpleIoc.Default.Register<MainMenuViewModel>();

    }



    public MainMenuViewModel MainMenu=>
            ServiceLocator.Current.GetInstance<MainMenuViewModel>();

在我的vm中:ViewModelLocator.cs:

我想更新到UWP / Win10 16299,因为servicelocator已经消失,这是我使用的代码:

public const string MainMenuPageKey = "MainMenuPage";
    public const string QuestionPageKey = "QuestionPage";

    static ViewModelLocator()
    {          
        var nav = new NavigationService();

        nav.Configure(MainMenuPageKey, typeof(MainMenuPage));
        nav.Configure(QuestionPageKey, typeof(QuestionPage));


        SimpleIoc.Default.Register<INavigationService>();
        SimpleIoc.Default.Register<IDialogService, DialogService>();
        SimpleIoc.Default.Register<IDataService, DataService>();

        SimpleIoc.Default.Register<MainMenuViewModel>();

    }

    public MainMenuViewModel MainMenu => 
       SimpleIoc.Default.GetInstance<MainMenuViewModel>();

看起来像是注册&#39;创造崩溃

你有什么技巧可以解决这个问题吗?

问候;

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。

实际上为了解决这个问题,我在app.xaml.cs中动态创建了一个ViewModelLocator实例。然后我在实例上放了一个断点。由于我已经在nuget中下载了ServiceLocator库,系统崩溃了。

删除此Dll后,一切运行正常。