2009-06-09 12 views
1

Il semble un peu bizarre, mais j'ai un code (qui est en fait un plug-in pour MS Blend) qui fonctionne parfaitement dans les tests unitaires, mais ne fonctionne pas à l'intérieur Blend.C# Variable statique apprécient oublie

Le code est le suivant.

private static volatile QWGUIRepository s_instance; 

    public static void Initialize(IUnityContainer container, string themeuri) 
    { 
     lock (s_lock) 
     { 
      s_instance = new QWGUIRepository(); 
      QWRepository.Initialize(container); 
     } 
    } 

Dans le débogueur (après l'avoir inséré Blend), je peux voir que s_instance s'initialisé avec une valeur (n'est pas nul par la suite), mais dès que je reçois « s_instance » de la méthode oublier c'est la valeur et sera nul.

Des idées?

Merci, Andreas

+0

Je dirais que mélange est probablement vous débarrasser de votre ensemble de plug-in alors qu'il n'est pas utilisé. –

Répondre

7

Deux. Suppositions

1) Vous lisez dans un AppDomain différent que vous écrivez dans les variables statiques sont scope par AppDomain. Si vous regardez AppDomain.CurrentDomain dans le débogueur pendant Initialize et puis quand vous essayez de le lire, ça ressemble ils sont le même domaine?

2) Vous avez fait d'être déclarée s_instance une variable locale Initialiser, et ne touchez pas la variable statique. Il faut espérer que Connaissons pas le cas, mais vous ne ...

4

Je ne sais rien au sujet de mélange, donc c'est une supposition sauvage. Est-ce que Blend démarre les plugins dans des AppDomains séparés? Vous pouvez vérifier cela dans la barre d'outils de l'emplacement de débogage dans Visual Studio. Cela pourrait expliquer ...

0

merci pour vos suggestions. Malheureusement (comme d'habitude) c'était une stupidité personnelle ... La réponse est - assurez-vous de n'utiliser que des assemblages avec un nom fort.

Andreas

Questions connexes