C#从“子项目”中的“父项目”访问一个类?

假设我在解决方案中有多个项目。 我有主项目parent_project和另一个项目child_project

如何从child_project访问驻留在parent_project类/命名空间?

我已在parent_project添加了对child_project的引用,因此我无法在child_project添加对parent_parent的引用,因为它会创建循环依赖项。

这可能吗?

如果您在项目之间共享逻辑,则需要隔离该依赖项并将其移至共享位置(例如,新项目),重构您的依赖项,以便您的核心逻辑存在于类似核心域的项目中或将您的项目混合在一起。

后者并不是最干净的解决方案。 我建议考虑一下你自己的问题并真正尝试回答“为什么我需要一个循环引用?我怎样才能重组以便我的依赖有意义?”。

您可以使用子项目中定义的接口注入您的依赖项(这在无法进行主要重构/太昂贵的情况下非常有用)。

例如,在儿童项目中:

 interface IA { DoLogicInB(); } 

在父项目中:

 class ConcreteA : ChildProject.IA { DoLogicInB() { ... } } 

在子项目中,您需要逻辑:

 class ChildB { void DoSomethingWithParent(IA logicEngine) { logicEngine.DoLogicInB(); } } 

然后,您需要能够从子项目外部注入父对象的具体实现。

FYI

我最终只是将逻辑复制到共享位置,“子”项目可以访问此版本。 我从可维护性的角度来看,这不是最好的解决方案,但它似乎是最好的妥协。

我不得不说Yannicks的答案是通常去那里的方式。 在您的特殊情况下(如您对他的回答的评论中所述),听起来这会有问题。 不同的方式是(只有在mainclass编译成dll时才可能):

  • 在子项目中包含mainproject的已编译dll
  • 通过reflection使用您需要的方法

这是一种可能的其他途径,但由于反思有其自身的麻烦,因此存在相当多的陷阱。