MVVM和Castle Windsor-类可见性问题

MVVM和Castle Windsor-类可见性问题,mvvm,castle-windsor,Mvvm,Castle Windsor,我的“视图”代码通常如下所示,视图模型被注入其构造函数中:- public partial class CustomerView : UserControl { public CustomerView(CustomerViewModel viewModel) { InitializeComponent(); DataContext = viewModel; } } public class CustomerViewMode

我的“视图”代码通常如下所示,视图模型被注入其构造函数中:-

public partial class CustomerView : UserControl
{
    public CustomerView(CustomerViewModel viewModel)
    {
            InitializeComponent();
            DataContext = viewModel;
    }
}
public class CustomerViewModel
{
    ...
    public CustomerViewModel(SomeDependency someDependency)
    {
        // etc...
视图模型如下所示,任何依赖项都被注入到其构造函数中:-

public partial class CustomerView : UserControl
{
    public CustomerView(CustomerViewModel viewModel)
    {
            InitializeComponent();
            DataContext = viewModel;
    }
}
public class CustomerViewModel
{
    ...
    public CustomerViewModel(SomeDependency someDependency)
    {
        // etc...

在本例中,所有三个类(视图、视图模型和SomeDependency)都位于同一个程序集中,理想情况下都应该是内部的,因为我不希望有人抓住程序集并开始实例化。问题是,我不能将视图
设置为内部
,因为它是一个局部类。如果我将其保留为公共的,它将不会编译,因为您无法将内部类型传递给公共类的构造函数


为了解决这个问题,我尝试将构造函数设置为内部。这已编译,但Castle Windsor引发运行时异常,因为无法向内部构造函数注册类型!因此,我似乎一直在触及这些死胡同——有什么解决方案吗,我的类设计是错误的,还是我不必要地担心将所有内容都内部化?

记录在案的是,我似乎过于担心试图“隐藏”类和方法,即使这只是一个exe,而不是客户的某种库。根据这里和其他地方的评论,我决定不尝试更改可见性。

“因为我不希望有人抓住程序集并开始实例化东西”。这真的是个问题吗?通常只有在创建可重用库时才需要将内容内部化。这些类是可重用库中的一部分,可以提供给客户或第三方吗?@Steven不,这只是一个桌面UI应用程序,所以我怀疑我什么都不担心(但我猜理论上有人可以使用程序集并尝试使用它)。但将类内部化并不能帮助你做到这一点。修改程序集IL以使类型再次公开是非常容易的。甚至还有一些工具可以帮助您实现这一点。如果我可以提出建议,请使用Calibun.Micro来连接视图/视图模型。它更干净,更容易维护。