2011-04-29 9 views
13

Tengo una clase a la que se hace referencia en varias vistas, pero me gustaría que haya solo una instancia de la clase compartida entre ellas. He implementado mi clase, así:Agregar un objeto estático a un diccionario de recursos

using System; 

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

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

¿Hay una manera que puedo agregar a mi Singleton.Instance diccionario de recursos como un recurso? me gustaría escribir algo como

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

en lugar de tener que escribir {x:static my:Singleton.Instance} cada vez que necesito hacer referencia a ella.

Respuesta

16

La respuesta aceptada es erróneo, es totalmente posible en XAML.

<!-- assuming the 'my' namespace contains your singleton --> 
<Application.Resources> 
    <x:StaticExtension Member="my:Singleton.Instance" x:Key="MySingleton"/> 
</Application.Resources> 
+0

No he intentado esto, pero [MSDN] (http://msdn.microsoft.com/en-us/library/ms742135.aspx) parece sugerir que debería funcionar, así que solo voy a aceptar esta respuesta. – Amanduh

+0

Si intenta fusionarlo en un diccionario de recursos, no necesitará la clave. Craig

4

Lamentablemente, no es posible desde XAML. Sin embargo, puede agregar el objeto singleton a los recursos de código subyacente:

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

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

De acuerdo con el MSDN StaticExtension no está disponible en el perfil de cliente .NET 3.5 o inferior. Para otras versiones, vea las versiones de XAML en la otra respuesta. – Alex

Cuestiones relacionadas