在Resharper中有Architecture View窗口,其中有传递引用的术语,但它实际上意味着什么有点令人困惑。来自他们的This blog post涵盖了它,但方式不完整。
我开始认为此选项仅用于简化解决方案图,这是正确的吗?
如果没有,你能解释 transitive reference 的含义吗?
答案 0 :(得分:23)
当ReSharper谈到传递引用时,它意味着对通过引用另一个中间程序集隐式地进行的程序集的引用。例如,假设我有一个带有程序集“Core.dll”的项目。我创建了一个名为“Features.dll”的项目,它引用了Core.dll。这是一个直接参考。
现在说我添加了一个测试项目,Features.Tests.dll。此程序集测试Features.dll中的代码,因此直接引用Features.dll。参考文件如下所示:
Features.Tests.dll -(References)-> Features.dll -(References)-> Core.dll
每个dll直接引用它使用的dll。但我们也可以说Features.Tests.dll在Core.dll上有一个“传递引用”。即:
Features.Tests.dll -(References)-> Core.dll
毕竟,如果没有Core.dll,它就无法运行。
使用ReSharper的体系结构视图时,默认情况下隐藏传递引用,首先是为了简化图表,但也因为暗示了传递引用 - 如果图表显示Features.Tests.dll引用Features.dll和Features.dll引用Core.dll,然后在视觉上明显看出Features.Tests.dll和Core.dll需要,因此传递引用Core.dll。通过启用“显示传递引用”按钮,可以使传递引用更加可见。
记住传递参考如何工作的一种方法是考虑数学,例如如果A> B和B> C,然后A> C.“大于”是一种传递关系。