DebugVisualizer,循环引用
DebugVisualizer, circular reference
我面临的问题可能很愚蠢,但我从未遇到过,所以我想我需要一些帮助。我正在学习如何使用调试可视化工具。
我创建了一个:DebuggerSide.cs
位于 CarGarageVisualizer
命名空间。
我希望在调试此实例时在此可视化工具中看到 CarGarage<T>
的类型,因此我将以下属性添加到 class:
[DebuggerVisualizer(typeof(CarGarageVisualizer.DebuggerSide))]
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}
现在,要添加第一个属性,我需要添加对包含 DebuggerSide
class 的 CarGarageVisualizer
的引用。没关系。但是现在,在我的 DebuggerSide
的覆盖方法 Show()
中,我想显式地将从 objectProvider
参数获得的对象转换为 CarGarage<T>
的类型。但是为了能够做到这一点,我需要引用包含此定义的 CarGarageLibrary
。正如我所说,我不能那样做,因为我收到有关递归引用的错误。
从关于此主题的其他 post 中,我知道这是一种不好的做法。但是,我不想将 CarGarage<T>
class 复制到我的 Visualizer 命名空间(这会解决问题,但我不确定这样做是否正确)除非没有更好的方法选项。
谁能帮我解决这个问题?
您应该将 CarGarageVisualizer.DebuggerSide
放在一个单独的库中,两者都可以引用。
我觉得没听懂。
怎么样,把CarGarage<T>
放在一个单独的库中。
library CarGarage:
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}
library DebugVis: (uses CarGarage)
DebuggerSide....
library app: (uses CarGarage)
[DebuggerVisualizer(typeof(CarGarageVisualizer.DebuggerSide))]
public class CarGarageImpl<T> : CarGarage<T> { }
您可以像这样使用可视化工具的 DebuggerVisualizerAttribute
constructor overload that takes string
containing the fully qualified type name
public static class MyVisualizers
{
public const string AssemblyRef = @"MyVisualizers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
}
[DebuggerVisualizer("MyVisualizersNamespace.CarGarageVisualizer+DebuggerSide, " + MyVisualizers.AssemblyRef)]
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}
我面临的问题可能很愚蠢,但我从未遇到过,所以我想我需要一些帮助。我正在学习如何使用调试可视化工具。
我创建了一个:DebuggerSide.cs
位于 CarGarageVisualizer
命名空间。
我希望在调试此实例时在此可视化工具中看到 CarGarage<T>
的类型,因此我将以下属性添加到 class:
[DebuggerVisualizer(typeof(CarGarageVisualizer.DebuggerSide))]
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}
现在,要添加第一个属性,我需要添加对包含 DebuggerSide
class 的 CarGarageVisualizer
的引用。没关系。但是现在,在我的 DebuggerSide
的覆盖方法 Show()
中,我想显式地将从 objectProvider
参数获得的对象转换为 CarGarage<T>
的类型。但是为了能够做到这一点,我需要引用包含此定义的 CarGarageLibrary
。正如我所说,我不能那样做,因为我收到有关递归引用的错误。
从关于此主题的其他 post 中,我知道这是一种不好的做法。但是,我不想将 CarGarage<T>
class 复制到我的 Visualizer 命名空间(这会解决问题,但我不确定这样做是否正确)除非没有更好的方法选项。
谁能帮我解决这个问题?
您应该将 CarGarageVisualizer.DebuggerSide
放在一个单独的库中,两者都可以引用。
我觉得没听懂。
怎么样,把CarGarage<T>
放在一个单独的库中。
library CarGarage:
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}
library DebugVis: (uses CarGarage)
DebuggerSide....
library app: (uses CarGarage)
[DebuggerVisualizer(typeof(CarGarageVisualizer.DebuggerSide))]
public class CarGarageImpl<T> : CarGarage<T> { }
您可以像这样使用可视化工具的 DebuggerVisualizerAttribute
constructor overload that takes string
containing the fully qualified type name
public static class MyVisualizers
{
public const string AssemblyRef = @"MyVisualizers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
}
[DebuggerVisualizer("MyVisualizersNamespace.CarGarageVisualizer+DebuggerSide, " + MyVisualizers.AssemblyRef)]
[Serializable]
public class CarGarage<T>:IEnumerable<T>
where T : Car,new()
{
...
}