继承c#中的分层依赖关系解析

时间:2017-11-20 16:18:27

标签: c# .net design-patterns architecture

为了保持关注点的分离,我正在尝试创建分层项目架构。让我们考虑以下示例。

  • ProjectAclass library并且

    • interface IntefaceA
    • 抽象类ClassA实现InterfaceA
  • ProjectBclass library,参考ProjectA并且

    • 抽象类ClassB继承ClassA(在ProjectB中添加PrjectA参考)
  • ProjectC
    • 继承自ClassC的类ClassB,因此在ProjectB
    • 中添加了ProjectC作为参考

现在问题是,ProjectC我收到错误The type ClassA is defined in an assembly that is not referenced

问题是

  1. 为什么ProjectC需要ProjectA参考
  2. 我是否需要将所有referenced project所有方式添加到分层链
  3. 如何在减少依赖性的同时实现分离设计

1 个答案:

答案 0 :(得分:1)

这是视觉工作室编译器常见的一个主题。它只会构建和链接在项目中直接引用的程序集,它不会遍历层次结构。

如果ClassC直接依赖于项目A中的代码,则需要引用ProjectA才能正确编译。

您不需要在每个项目中包含整个层次结构,只需要包含它引用的内容。如果项目B引用项目X,Y和Z用于其他事项,但项目C不是从项目B中使用它们的任何内容派生的,那么项目C不需要引用。

将事物分开并减少直接依赖性的一种方法是使用依赖注入框架。 MEF就是这样一个例子。 https://docs.microsoft.com/en-us/dotnet/framework/mef/

在这种情况下,你直接从一个直接从另一个程序集中的anther类派生的类派生出来,你基本上不能引用那个程序集,因为编译器需要它来正确编译你的ClassC,并且不是为了迭代依赖层次结构。