.NET利用可传递的依赖项/引用

.NET利用可传递的依赖项/引用,.net,reference,n-tier-architecture,transitive-dependency,.net,Reference,N Tier Architecture,Transitive Dependency,我有一个包含3个项目的Visual Studio解决方案: 我的网站(A) 商业模式(B) 持久性(C) Persistence,项目C,依赖于NHibernate,包含所有存储库接口、这些存储库的Hibernate实现以及映射到DB表的类 BusinessModel,项目B,依赖于C,包含所有服务类和代表业务域实体的类。这些服务使用存储库来检索数据,然后将这些数据转换为业务表示,并在其自己的界面中呈现 MyWebSite,项目A,依赖于A,包含所有MVC类/文件。这里的MVC控制器使用B中

我有一个包含3个项目的Visual Studio解决方案:

  • 我的网站(A)
  • 商业模式(B)
  • 持久性(C)
Persistence
,项目
C
,依赖于
NHibernate
,包含所有存储库接口、这些存储库的
Hibernate
实现以及映射到DB表的类

BusinessModel
,项目
B
,依赖于
C
,包含所有服务类和代表业务域实体的类。这些服务使用存储库来检索数据,然后将这些数据转换为业务表示,并在其自己的界面中呈现

MyWebSite
,项目
A
,依赖于
A
,包含所有MVC类/文件。这里的MVC控制器使用
B
中的服务类来执行任何业务逻辑功能。这一级别的人员不知道project
B
使用project
C
的存储库来执行其操作

在一个完美的世界里,我会想象项目
a
应该引用
B
哪个引用
C
哪个引用
NHibernate
。这似乎不是真的。我发现项目
A
需要参考
B
C
NHibernate
我不喜欢我的web应用程序需要了解后端架构的想法,尤其不希望它知道我正在使用
NHibernate
作为ORM

有没有办法告诉这些项目在解析其引用时利用可传递依赖关系

我的项目是VisualStudio2010中的.NET4,如果这些信息有什么不同的话

编辑:
我发现了一个相关的问题,该问题解释了只有当project
C
的类从project
B
中出现时才需要这些引用。我已经下定决心不让层之间有任何泄漏,我知道
Hibernate
类只在
C
中使用,所以我可能只是没有正确地理解…

您可能需要阅读一下洋葱架构。它可能会帮助你:@rie819-我在其他项目中也使用过洋葱架构,只是没有任何.NET项目。我相信它很容易出现同样的依赖关系/引用问题,但是应用程序本身需要了解任何可传递的依赖关系,因为它们仍然是体系结构的层。洋葱模式只是将一些关注点转移到不同的级别,但仍然存在级别,我希望将外部/顶层不可知论保留到较低级别的实现中。