c# - 两个 .net 程序集之间的循环引用

标签 c# circular-reference

我有两个程序集 A 和 B。

A 已经存在对 B 的引用,并且必须保持这种方式。现在我对 B 做了一些修改,需要引用 A。所以发生了循环引用。

一些细节:

A 有几个属性网格,需要托管 B 中的对话框。因此,为了避免这种循环引用问题,我尝试在 A 和 B 都引用的第三个程序集中定义网格的接口(interface),并使 B 仅引用接口(interface)。

我面临的两个问题:

  1. 在 A 中定义的网格中有太多自定义数据类型(具体属性),我必须为它们中的每一个定义接口(interface)。

  2. 我看到这个例子与函数参数一起工作,例如通过传入的接口(interface)调用目标函数。但是考虑到以下代码,它如何适合 - 我不能新建一个 ICustomPropertyGridWrapper ...

    object = new CustomPropertyGridWrapper(...)<br/> m_property.SelectedObject = object;

最佳答案

这是C#语言设计的问题。在 C/C++ 中,您只需使用 header 来定义编译单元的接口(interface)并解决依赖关系。

在 C# 中没有 header 。你有三个选择

  1. 1> 合并程序集(增加编译时间,可能不会
    如果程序集在功能上不相关,则有意义)。 C# 经常强制您这样做,即使程序集在逻辑上应该是分开的。
  2. 依赖注入(inject)
  3. 使用两个模块都引用的接口(interface)创建第三个组件。这通过 C# 语言机制(接口(interface))完成依赖注入(inject),而不是自己滚动;但它是一回事。

第 3 种情况通常是在 C# 中处理这些情况的方式,但它不像 C/C++ 那样优雅地解决这个问题。对于大型代码库,您必须从一开始就牢记这一点进行设计。

关于c# - 两个 .net 程序集之间的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501242/

相关文章:

c# - 更改 Jquery FlexGrid 的数据

C# 运行应用程序

c# - 很好地显示时间跨度

java - int/String 链表和变量的问题

c# - 如何使用 CORS 启用自定义 header ?

c# - 如何在不实际聚焦的情况下为按钮应用焦点视觉样式?

c++ - C2061 - 循环依赖

delphi - 类之间的循环引用

sql - 循环匹配

java - 如何避免观察者模式的循环引用?