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

Lys*_*Lys 7 c# circular-reference

我有两个组件A和B.

A现有对B的引用,必须保持这种方式.现在我对B进行了一些需要引用A的更改.因此发生循环引用.

一点细节:

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

我面临的两个问题:

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

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

    object = new CustomPropertyGridWrapper(...)
    m_property.SelectedObject = object;

Hal*_*ate 5

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

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

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

第三种通常是在 C# 中处理这些情况的方式,但它不像 C/C++ 解决这个问题那么优雅。对于大型代码库,您必须从一开始就考虑到这一点。


Ewa*_*man 1

对于问题 1,除了合并两个项目或进行一些代码生成之外,没有真正的解决方案

对于第二个,您可以通过实现工厂设计模式来做到这一点。