【问题标题】:MVVM and Castle Windsor - problems with class visibilityMVVM 和 Castle Windsor - 类可见性问题
【发布时间】:2013-07-10 13:37:17
【问题描述】:

我的“视图”代码隐藏通常看起来像这样,视图模型被注入到它的构造函数中:-

public partial class CustomerView : UserControl
{
    public CustomerView(CustomerViewModel viewModel)
    {
            InitializeComponent();
            DataContext = viewModel;
    }
}

视图模型看起来像这样,任何依赖项都被注入到它的构造函数中:-

public class CustomerViewModel
{
    ...
    public CustomerViewModel(SomeDependency someDependency)
    {
        // etc...

在此示例中,所有三个类(视图、视图模型和 SomeDependency)都驻留在同一个程序集中,并且理想情况下都应该是内部的,因为我不希望有人抓住程序集并开始实例化事物。问题是,我无法创建视图internal,因为它是一个部分类。如果我将其公开,它将无法编译,因为您无法将内部类型传递给公共类的构造函数。

为了解决这个问题,我尝试将 constructors 改为内部。这已编译,但 Castle Windsor 会引发运行时异常,因为无法使用内部构造函数注册类型!所以我似乎一直在走这些死胡同——有什么解决办法吗?是我的班级设计错了,还是我不必要地担心把所有东西都放在内部?

【问题讨论】:

  • “因为我不希望有人抓住程序集并开始实例化”。这真的是个问题吗?通常只有在创建可重用库时才需要在内部制作东西。这些类是交付给客户或第三方的可重用库的一部分吗?
  • @Steven 不,这只是一个桌面 UI 应用程序,所以我怀疑我什么都担心(但我想理论上有人可以获取程序集并尝试使用吗?)。
  • 将课程设为内部并不能帮助您解决这个问题。更改程序集 IL 以再次公开类型非常容易。甚至还有一些工具可以帮助您。
  • 如果我可以提出建议,请使用 Calibun.Micro 到 View/ViewModel 接线。它更清洁,更易于维护。

标签: mvvm castle-windsor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多