在XAML中使用Singleton - 可能吗?

时间:2013-12-13 15:51:10

标签: c# wpf xaml singleton

我有一个名为NotificationScheduler的单例类。我真的只能在我的应用程序中使用其中一个。 Singleton模式是通过“Instance”属性实现的,只能通过此属性访问实例,如下所示:

    private static NotificationScheduler _instance = null;
    public static NotificationScheduler Instance
    {
        get { return _instance ?? (_instance = new NotificationScheduler()); }
    }

    public NotificationScheduler()
    {
#if DEBUG
        if (_instance != null)
            Debug.WriteLine(
                "WARN: A second Instance of NotificationScheduler has been created");
#endif
        _instance = this;
        init();
    }

但我也有理由这样在XAML中创建:

        <NotifyIcon:NotificationScheduler x:Key="NotificationScheudlerInstance"
                        IconSource="/Images\Icons/myicon.ico"

我知道这不使用Instance属性!这甚至可能吗?如果我在这样的代码中访问实例,当然会创建一个实例两次:

NotificationScheduler.Instance.DoSomething();
NotificationScheduler n = (NotificationScheduler) FindResource("NotifyIcon");
n.DoSomething();

目前,我的解决方案是通过XAML代码创建FindResource事件,然后一切正常。

问题:我可以通过访问静态属性在XAML中创建资源吗?

3 个答案:

答案 0 :(得分:3)

为什么不在第一个代码段中使用单例属性,并在XAML中使用{x:Static NotifyIcon:NotificationScheduler.Instance}引用它?如果它是一个单例,它不应该是一个范围的资源。

答案 1 :(得分:1)

为什么不创建一个可以有多个实例的控件,而不是尝试在XAML中创建单例,而是所有实例都引用静态或单例对象?我认为这可能会更容易管理。

答案 2 :(得分:0)

您可以绑定到.Net 4.5中的静态属性;更多here