我有两个程序集 A 和 B。
A 已经存在对 B 的引用,并且必须保持这种方式。现在我对 B 做了一些修改,需要引用 A。所以发生了循环引用。
一些细节:
A 有几个属性网格,需要托管 B 中的对话框。因此,为了避免这种循环引用问题,我尝试在 A 和 B 都引用的第三个程序集中定义网格的接口(interface),并使 B 仅引用接口(interface)。
我面临的两个问题:
在 A 中定义的网格中有太多自定义数据类型(具体属性),我必须为它们中的每一个定义接口(interface)。
我看到这个例子与函数参数一起工作,例如通过传入的接口(interface)调用目标函数。但是考虑到以下代码,它如何适合 - 我不能新建一个 ICustomPropertyGridWrapper ...
object = new CustomPropertyGridWrapper(...)<br/> m_property.SelectedObject = object;
最佳答案
这是C#语言设计的问题。在 C/C++ 中,您只需使用 header 来定义编译单元的接口(interface)并解决依赖关系。
在 C# 中没有 header 。你有三个选择
- 1> 合并程序集(增加编译时间,可能不会
如果程序集在功能上不相关,则有意义)。 C# 经常强制您这样做,即使程序集在逻辑上应该是分开的。 - 依赖注入(inject)
- 使用两个模块都引用的接口(interface)创建第三个组件。这通过 C# 语言机制(接口(interface))完成依赖注入(inject),而不是自己滚动;但它是一回事。
第 3 种情况通常是在 C# 中处理这些情况的方式,但它不像 C/C++ 那样优雅地解决这个问题。对于大型代码库,您必须从一开始就牢记这一点进行设计。
关于c# - 两个 .net 程序集之间的循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501242/