这听起来有点奇怪,但我有一些代码(实际上是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”将忘记它的值并且将会是空的。
有什么想法吗?
谢谢, 安德烈亚斯
答案 0 :(得分:7)
两个猜测:
1)你正在阅读与你写的不同的AppDomain
。静态变量的范围是AppDomain
。如果您在Initialize期间查看调试器中的AppDomain.CurrentDomain
,然后当您尝试阅读它时,它们看起来是否属于同一个域?
2)您实际上已将s_instance声明为Initialize中的局部变量,并且未触及静态变量。希望事实并非如此,但你永远不会知道...
答案 1 :(得分:4)
我对Blend一无所知,所以这是一个疯狂的猜测。 Blend是否在单独的AppDomain中启动插件?您可以在Visual Studio的调试位置工具栏中检查它。这可以解释一下......
答案 2 :(得分:0)
感谢您的建议。不幸的是(像往常一样)这是个人的愚蠢...... 答案是 - 确保您只使用强名称的程序集。
安德烈亚斯