Добавление статического объекта в словарь ресурсов - PullRequest
13 голосов
/ 29 апреля 2011

У меня есть класс, на который ссылаются в нескольких представлениях, но я бы хотел, чтобы между ними был только один экземпляр класса.Я реализовал свой класс следующим образом:

using System;

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

Есть ли способ добавить Singleton.Instance в свой словарь ресурсов в качестве ресурса?Я хотел бы написать что-то вроде

<Window.Resources>
    <my:Singleton.Instance x:Key="MySingleton"/>
</Window.Resources>

вместо того, чтобы писать {x:static my:Singleton.Instance} каждый раз, когда мне нужно сослаться на него.

Ответы [ 2 ]

18 голосов
/ 19 октября 2012

Принятый ответ неверен, его полностью возможно в XAML.

<!-- assuming the 'my' namespace contains your singleton -->
<Application.Resources>
   <x:StaticExtension Member="my:Singleton.Instance" x:Key="MySingleton"/>
</Application.Resources>
5 голосов
/ 29 апреля 2011

К сожалению, это невозможно из XAML. Но вы можете добавить одноэлементный объект к ресурсам из выделенного кода:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e) {
        base.OnStartup(e);

        Resources.Add("MySingleton", Singleton.Instance);
    }
}
...