C#静态变量忘记了值

时间:2009-06-09 19:31:56

标签: c#

这听起来有点奇怪,但我有一些代码(实际上是MS Blend的插件)在单元测试中运行完美,但在Blend中无效。

代码如下。

    private static volatile QWGUIRepository s_instance;

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

在调试器中(在将它附加到Blend之后),我可以看到s_instance被初始化为一个值(之后不是null),但是一旦我离开方法“s_instance”将忘记它的值并且将会是空的。

有什么想法吗?

谢谢, 安德烈亚斯

3 个答案:

答案 0 :(得分:7)

两个猜测:

1)你正在阅读与你写的不同的AppDomain。静态变量的范围是AppDomain。如果您在Initialize期间查看调试器中的AppDomain.CurrentDomain,然后当您尝试阅读它时,它们看起来是否属于同一个域?

2)您实际上已将s_instance声明为Initialize中的局部变量,并且未触及静态变量。希望事实并非如此,但你永远不会知道...

答案 1 :(得分:4)

我对Blend一无所知,所以这是一个疯狂的猜测。 Blend是否在单独的AppDomain中启动插件?您可以在Visual Studio的调试位置工具栏中检查它。这可以解释一下......

答案 2 :(得分:0)

感谢您的建议。不幸的是(像往常一样)这是个人的愚蠢...... 答案是 - 确保您只使用强名称的程序集。

安德烈亚斯