在不引入新项目的情况下解决循环引用

时间:2010-09-21 23:17:45

标签: .net dependencies circular-reference

我有大而肥胖的遗产计划。我必须完成的一项任务是在项目A 中添加一个新类。 项目B 引用项目A ,但我需要添加的功能取决于项目B 中类的方法。当然,我无法从 A 引用项目B ,因为这会创建一个循环引用。在类似的情况下,我的方法是创建项目C 并将依赖项从 A B 移动到其中,并同时具有 B 引用它。

但是,对于这个特殊的任务,它需要移动如此多的代码才能在解决方案中造成巨大的混乱。

现在,我正在传递object中装箱所需类的实例,并使用反射来访问我在运行时需要的方法。

有没有其他(更好)的方法来解决这个问题而不将代码移动到项目C?

2 个答案:

答案 0 :(得分:3)

创建项目A中定义的接口,该接口包含您希望A能够调用的项目B中方法的方法签名。在项目B中的类上实现该接口。

剩下的就是为B提供一种方式告诉A“我在这里!给我打电话!”。您可以通过在A中定义静态方法来实现这一点,该方法将接口作为参数并在项目A中的变量中保留它.B可以调用该方法,传递实现接口的类的实例。当A需要调用B时,它调用该注册函数存储的接口引用。

答案 1 :(得分:0)

如果你有循环引用,那么你可能已经在解决方案中将一个项目分成两个项目,然后你可以简单地将他的代码合并到一个项目中,然后将第二个项目删除,然后你就不会引入新的项目。