2009-06-09 5 views
1

少し奇妙に聞こえるが、単体テストで完璧に動作するブレンド内で動作しないコード(実際にはMSブレンド用のプラグイン)がある。C#静的変数が値を忘れる値

コードは次のとおりです。 (ブレンドし、それを取り付けた後)デバッガで

private static volatile QWGUIRepository s_instance; 

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

、私はそのs_instanceが値で初期化されます見ることができます(その後はnullではない)、しかし、すぐに私は、メソッド「s_instance」から抜け出すと忘れてしまいますそれは価値があり、nullになります。

アイデア?

おかげで、 アンドレアス

+0

私はブレンドがおそらくあなたのプラグインアセンブリを使用していないときに処分していると言います。 –

答えて

7

つの推測:。

1)あなたが書いているよりも、あなたは異なるAppDomainで読んでいる静的変数は、AppDomainによってスコープされています。 Initialize中にデバッガでAppDomain.CurrentDomainを見て、それを読み取ろうとしているときに、同じドメインのように見えますか?

2)実際にs_instanceをInitializeのローカル変数として宣言し、静的変数には触れていません。うまくいけば、それは事実ではありませんが、あなたは決して知りません...

4

私はブレンドについて何も知らないので、これは野生の推測です。 Blendは別々のAppDomainsでプラグインを起動しますか? Visual Studioのデバッグ場所ツールバーで確認できます。それはそれを説明することができます...

0

提案ありがとうございます。残念ながら(いつものように)それは個人的な愚かさでした... 答えは - 厳密な名前のアセンブリを使用することを確認します。

アンドレアス

関連する問題