gpt4 book ai didi

c# - .NET 安全机制限制同一项目中两种类型之间的访问?

转载 作者:行者123 更新时间:2023-11-30 22:45:51 27 4
gpt4 key购买 nike

问题

.NET Framework 中是否有一种机制可以在不使用单独的项目/程序集的情况下隐藏另一种自定义类型?我不是在谈论访问修饰符来隐藏另一个类型的类型成员——我的意思是隐藏类型本身。

背景

我在 ASP.NET 网站项目中工作,团队决定不为不同的软件层使用单独的项目程序集。因此,我正在寻找一种方法,例如,我不允许其类访问同一 ASP.NET 网站项目中的其他类型的 DataAccess/文件夹。换句话说,我想伪造这些层,并在每一层周围都有某种安全机制,以防止它访问另一层。

更多信息和详细信息......

显然没有办法使用特定于语言的 OO 关键字来强制执行此限制,因此我正在寻找其他东西,例如:可能是权限框架或代码访问机制,可能是使用元数据(如属性)的东西。甚至是限制一个 namespace 访问另一个 namespace 的东西。我不确定它可能采用的最终形式。

如果这是 C++,我可能会使用 friend 作为解决方案,在这种情况下它不会转换为 C# internal,尽管它们经常被比较.

我真的不在乎这个解决方案是真的将类型彼此隐藏起来还是只是让它们不可访问;但是我不想锁定所有其他类型的一种类型,这是访问修饰符不是解决方案的另一个原因。运行时或设计时答案就足够了。寻找易于实现的东西,否则不值得付出努力......

最佳答案

您可以使用 NDepend 来执行此操作:

http://www.ndepend.com/

NDepend 可以让您通过指定某些命名空间不应相互引用来强制实现“分层”规则。然后,您将 NDepend 和规则集插入到您的自动构建中,如果有任何不端行为,构建将失败(并提供完整报告)。

通过这种方式,您可以在程序集中实现逻辑软件分层概念,而无需使用项目结构来进行物理操作。

更新

我昨晚很晚才回答这个问题,从字面上看,即如何直接解决这个问题。尽管可以使用工具来解决问题,但随着项目的发展,整个团队在一个项目中进行开发很可能会成为一种非常痛苦的经历:

  • 除非人们纪律严明,否则构建将继续因分层违规而中断。
  • VS 项目文件将出现源代码管理合并抖动 - 不愉快。
  • 如果您想与正在开发的其他应用程序\项目共享程序集,则您的重用单元非常大且未定义。这可能导致非常不希望的耦合。

虽然我不提倡有很多小程序集,但围绕核心概念定义一个合理的数字是非常可行和可取的,例如“UI”、“数据访问”、“业务逻辑”、“公共(public)库”和“共享类型”。

关于c# - .NET 安全机制限制同一项目中两种类型之间的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com