我的“视图”代码隐藏通常看起来像这样,视图模型被注入到它的构造函数中:-
public partial class CustomerView : UserControl
{
public CustomerView(CustomerViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}
}
视图模型看起来像这样,任何依赖项都被注入到它的构造函数中:-
public class CustomerViewModel
{
...
public CustomerViewModel(SomeDependency someDependency)
{
// etc...
在此示例中,所有三个类(视图、视图模型和 SomeDependency)都驻留在同一个程序集中,并且理想情况下都应该是内部的,因为我不希望有人抓住程序集并开始实例化事物。问题是,我无法制作视图internal
,因为它是部分课程。而且,如果我将其公开,它将无法编译,因为您无法将内部类型传递给公共类的构造函数。
为了解决这个问题,我尝试将构造函数改为内部。这已编译,但 Castle Windsor 会引发运行时异常,因为无法使用内部构造函数注册类型!所以我似乎一直在打这些死胡同——有什么解决办法吗,我的班级设计错了,还是我不必要地担心把所有东西都放在内部?