为什么这不起作用(Singleton上的NavigationService)?

时间:2011-10-03 08:56:01

标签: c# silverlight windows-phone-7 mvvm singleton

public class Navigator : PhoneApplicationPage
{
    private static Navigator _instance;
    private static object _lock = new object();

    public static Navigator Instance
    {
        get
        {
            lock (_lock)
            {
                if (_instance == null)
                {
                    _instance = new Navigator();
                }
                return _instance;
            }
        }
        private set
        {
            lock (_lock)
            {
                _instance = value;
            }
        }
    }

    private Navigator(){}

    public bool NavigateTo(string uri)
    {
        lock (_lock)
        {
            return NavigationService.Navigate(new Uri(uri, UriKind.Relative));
        }
    }
}

在ViewModel类中调用它:

 Navigator.Instance.NavigateTo("/NotePage.xaml");

所以我得到了这个,而NavigationService.Navigate(..)抛出了NullReferenceException。

我如何解决这个/什么是替代方案?我想从ViewModel类中使用NavigationService。

我更喜欢不需要安装更多组件(MVVM灯)的解决方案。如果这绝对不可能,我会查看Messenger / Message类。

修改 我几乎放弃了。我通过创建一个可以包裹所有内容的超链接按钮来解决我的问题。

1 个答案:

答案 0 :(得分:0)

你的单身人士不是线程安全的。看看这个实现:

http://www.yoda.arachsys.com/csharp/singleton.html