我正在使用MVVM Light。当我在资源中添加更多值(value)转换器时,我的应用程序崩溃,但出现以下异常:

App.xaml.cs OnLaunched事件中,我有这一行

ServiceLocator.Current.GetInstance<MyViewModel>();
它在那里崩溃了。
在此ServiceLocator中,我可以看到有一个SetLocatorProvider方法,该方法将ServiceLocatorProvider作为参数。我在Web上找不到任何内容,并且Microsoft的MSDN页面已过时:
protected override async void OnLaunched(LaunchActivatedEventArgs e)
    {
        Frame rootFrame = Window.Current.Content as Frame;

        if (rootFrame == null)
        {
            ...
        }

        if (rootFrame.Content == null)
        {
            ...
        }

        Window.Current.Activate();

        DispatcherHelper.Initialize();

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

        ServiceLocator.Current.GetInstance<MyViewModel>();
    }
编辑:这是完整的OnLaunched事件。
放后
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
发生异常:

附加信息:在缓存中找不到类型:cMC.ViewModel.MyViewModel。
这是ViewModelLocator的代码
public class ViewModelLocator
{
    public ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        SimpleIoc.Default.Register<MyViewModel>();
    }

    public MyViewModel MyVM
    {
        get
        {
            return ServiceLocator.Current.GetInstance<MyViewModel>();
        }
    }

    public static void Cleanup() {}
}

最佳答案

我有点想通了。

还需要注册ViewModel,这是在ViewModelLocator构造函数中发生的,但是由于某种原因,构造函数将在以后执行。所以我像这样修改了ViewModelLocator类:

public class ViewModelLocator
{
    public ViewModelLocator()
    {

    }

    public static void SetAndReg()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        SimpleIoc.Default.Register<MyViewModel>();
    }

    public MyViewModel MyVM
    {
        get
        {
            return ServiceLocator.Current.GetInstance<MyViewModel>();
        }
    }

    public static void Cleanup() {}
}

}

然后在App.xaml.cs中:
...OnLaunched(...)
{
...
        DispatcherHelper.Initialize();

        ViewModelLocator.SetAndReg();

        ServiceLocator.Current.GetInstance<MyViewModel>();
...
}

关于c# - 必须设置ServiceLocationProvider,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28043565/

10-14 02:28