Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# Visual Studio多项目解决方案问题_C#_Asp.net_Visual Studio - Fatal编程技术网

C# Visual Studio多项目解决方案问题

C# Visual Studio多项目解决方案问题,c#,asp.net,visual-studio,C#,Asp.net,Visual Studio,我在VS 2017中有此解决方案,它有多个项目: 示例.DomainModels 例如,数据访问 例如,基础设施 示例.Web 因此,我的Web项目参考Infrastructure和Infrastructure项目参考DataAccess以及DomainModels项目。解决办法很有效 但是,如果在我的Web项目中,如果我尝试从DomainModels访问任何实体,我可以轻松访问该实体而不会出现任何错误,即使Web项目没有任何对DomainModels的引用 你能帮我理解这个项目是如何运作的

我在VS 2017中有此解决方案,它有多个项目:

  • 示例.DomainModels
  • 例如,数据访问
  • 例如,基础设施
  • 示例.Web
因此,我的
Web
项目参考
Infrastructure
Infrastructure
项目参考
DataAccess
以及
DomainModels
项目。解决办法很有效

但是,如果在我的
Web
项目中,如果我尝试从
DomainModels
访问任何实体,我可以轻松访问该实体而不会出现任何错误,即使
Web
项目没有任何对
DomainModels
的引用

你能帮我理解这个项目是如何运作的吗?是否因为web项目间接引用了DomainModels(
web
->
基础设施
->
DomainModels


谢谢。

请调查洋葱架构:

域模型不应引用任何内容。为了达到这个目的,;你应该调查依赖倒置。我最近在这里问了一个关于依赖倒置的问题:


如果您想将域层与web分离,那么您可以引入服务层。

事实上,根据您的评论,web将参考所有其他项目


编译时,基础架构将连接引用dataaccess和域模型命名空间,因此您可以从web访问dataaccess和域模型中存在的类型或命名空间,因为您是从web引用基础架构。

是否有任何方法限制域实体从web访问?我不确定,但您可以使用访问修饰符、静态、密封、单例方法来限制对DomainEntities中存在的类的访问。既然您指的是基础设施,唯一的方法就是从基础设施中去掉域实体。谢谢您的回答。我明白。我只是想了解一下这里的情况。所以我这里的问题主要是关于引用,而不是架构和模式。DomainModels没有引用任何东西。请参阅我的最后一段关于如何将web层与域层分离的内容。好的。我得到了它。你问的问题帮助我理解了这个概念。对,这意味着应该使用DI来限制访问。是的。我还将包括一个服务层