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()
{
    ...
}