Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET安全机制来限制同一项目中两种类型之间的访问?_C#_Asp.net_Permissions_Types_Web Site Project - Fatal编程技术网

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

C# .NET安全机制来限制同一项目中两种类型之间的访问?,c#,asp.net,permissions,types,web-site-project,C#,Asp.net,Permissions,Types,Web Site Project,问题 在.NET Framework中是否有一种机制可以在不使用单独的项目/程序集的情况下从另一个自定义类型隐藏一个自定义类型?我不是说访问修饰符从另一个类型隐藏一个类型的成员——我的意思是隐藏类型本身 背景 我在一个ASP.NET网站项目中工作,团队决定不对不同的软件层使用单独的项目程序集。因此,我正在寻找一种方法,例如,拥有一个DataAccess/文件夹,我不允许它的类访问同一ASP.NET网站项目中的其他类型。换句话说,我想伪造这些层,在每一层周围都有某种安全机制来防止它访问另一层 更多

问题

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

背景

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

更多信息和细节…

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

如果这是C++,我可能会使用<代码>朋友<代码>来做解决方案,虽然这是经常被比较的,但这并不转化为C<代码>内部< /代码>。


我真的不在乎解决方案是否真的隐藏了彼此之间的类型,或者只是让它们无法访问;然而,我不想从所有其他类型中锁定一种类型,另一个原因是访问修饰符不是解决方案。运行时或设计时答案就足够了。寻找易于实现的东西,否则就不值得付出努力……

没有现成的东西;可能有一些第三方工具可用于将一些规则混在一起,可能是基于名称空间等。例如…

您可以使用NDepend来实现这一点:

NDepend允许您通过指定某些名称空间不应相互引用来强制执行“分层”规则。然后将NDepend和规则集插入到自动构建中,如果有任何不当行为,它将导致构建失败(带有完整报告)

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

更新

我昨晚很晚才回答了这个问题,也就是说,你如何直接解决这个问题。尽管可以使用工具来解决问题,但随着项目的发展,在整个团队中开发一个项目很可能会是一次非常痛苦的经历:

  • 除非人们非常有纪律,否则在违反分层规则的情况下,构建将持续中断
  • 在VS项目文件上会出现源代码管理合并混乱-这并不令人愉快
  • 如果要与正在开发的其他应用程序\项目共享程序集,则重用单元非常大且未定义。这可能会导致非常不希望的耦合

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

我喜欢这个产品,因为它是由微软支持的,可定制的,尽管文档还有点不尽如人意。