【问题标题】:.Net enforcing dependency blocks at solution level [closed].Net 在解决方案级别强制执行依赖块 [关闭]
【发布时间】:2019-06-07 14:26:22
【问题描述】:

解决方案洞察力和问题。

我的解决方案中有多个 BC,在某些时候将被翻译为微服务。在这一点上,一切都将在同一个过程下运行,因此在不知不觉中有人可以在他/她想要的任何地方添加引用,如果我们要保持结构,这当然是不可取的。

所以我要问的是你如何强制执行一个规则,即在 BC 之间没有依赖关系,我不是在谈论拉取请求,对于任何试图使用某些东西的人来说,这个问题应该立即显而易见除了他/她当时正在工作的另一个 BC。

我想在我的解决方案中强制执行依赖项阻止规则,从一个项目到另一个项目(BC 到 BC)。

应在构建时检查损坏的依赖项,并导致编译时错误。

有什么办法可以做到吗?怎么样?

【问题讨论】:

  • 考虑将其作为单元测试实现,以便您的 CI 流程强制执行。

标签: c# .net visual-studio


【解决方案1】:

是的,绝对可以使用 .Net 架构图。例如看看dependency diagrams。一旦您对所需的架构进行了建模,您就可以将 Microsoft.DependencyValidation.Analyzer 包添加到您的项目中,它可以实时验证架构依赖项,并在这些依赖项被破坏时给出编译时错误。该包以NuGet 包的形式提供,适用于 VS2017 中的 .NET 项目。

【讨论】:

    【解决方案2】:

    您可以使用“Internal”关键字来保护您的程序集类不被访问。 这里有更全面的答案:Practical uses for the "internal" keyword in C#

    【讨论】:

    • 没有帮助我不想这样做。我如何从允许这样做的项目中访问它们?
    • 您可以使用 InternalsVisibleTo 属性授予对特定程序集的访问权限(这不是一个好主意)。
    • 为什么这不是一个好主意?它需要一些额外的工作,但这正是这种需求的原因。
    • 您可以使类成为内部类并通过接口和依赖注入公开行为,例如使用 Castle Windsor。为此,您必须定义允许在 Winsor 容器中注册已加载程序集的类的方法,但这绝对是可能的——我们经常这样做。但是,这当然不会给您任何编译时错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多