采用三个 VB.net 程序集:A、B 和 C。A 引用 B,B 引用 C,但 A 不引用 C。给定以下三个类(每个程序集中一个类):
大会 A
Public Class View()
Public Property ViewModel as SomeViewModel
End Class
大会 B
Public Class SomeViewModel()
'Compiler is ok with private variable _Model, doesn't complain.
Private _Model as SomeModel
Friend Sub New(Model as SomeModel)
Me._Model = Model
End Sub
'Compiler complains when Friend property is added, requiring A to directly
'reference C.
Friend ReadOnly Property UnderlyingModel as SomeModel
End Class
大会 C
Public Class SomeModel()
Public Property ModelID as Integer
End Class
本质上,Assembly C 包含一个模型 (SomeModel),它由 Assembly B 中的 SomeViewModel 包装。SomeViewModel 通过“Friend”属性将该模型暴露给 AssemblyB 中的其他类。Assembly A 中的 View 包含 SomeViewModel,但由于 Friend 修饰符,该 View 无法访问 SomeViewModel.UnderlyingModel 属性。
鉴于此配置,VS 2010 在编译程序集 A 时会出现以下编译错误:
Error 3 Construct makes an indirect reference to project 'AssemblyC',
which contains 'AssemblyC.SomeModel'. Add a project reference to 'AssemblyC' to your
project.
有没有办法通过 Friend 修饰符公开 UnderlyingModel 属性,而无需 Assembly A 引用 Assembly C?我原以为 Friend 修饰符会使这成为可能,因为程序集 A 中的视图无法访问在程序集 C 中公开模型的属性?