MVVM&& IOC&&子的ViewModels

时间:2010-05-21 11:44:15

标签: mvvm inversion-of-control ninject

我有一个ViewModel,它在构造函数中采用两个相同类型的参数:

public class CustomerComparerViewModel
{
    public CustomerComparerViewModel(CustomerViewModel customerViewModel1,
                                     CustomerViewModel customerViewModel2)
    {

    }
}

public class CustomerViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

如果我没有使用IOC,我可以新建视图模型并传递子视图模型。我可以将两个视图模型打包到一个类中并将其传递给构造函数但是如果我有另一个只需要一个视图模型的视图模型CustomerViewModel我需要传入viewmodel不需要的东西。

如何使用IOC处理此问题?我正在使用Ninject btw。

由于

2 个答案:

答案 0 :(得分:1)

我不熟悉Ninject,但在我看来,为了让IoC知道CustomerViewModels要注入构造函数,你必须提前设置这些对象。使用类似MEF的属性和Psuedo代码,它可能看起来像......

[Export()]
public class CustomerSelectorViewModel
{
    [Export("CustomerA")]
    public class CustomerViewModel FirstSelection {get;set;}

    [Export("CustomerB")]
    public class CustomerViewModel SecondSelection {get;set;} 
}

[Export()]
public class CustomerComparerViewModel
{
    [ImportingConstructor]
    public CustomerComparerViewModel([Import("CustomerA")]CustomerViewModel customerViewModel1, [Import("CustomerB")]CustomerViewModel customerViewModel2)
    {

    }
}

答案 1 :(得分:1)

以下是如何在Ninject中执行此操作:

Container.Bind<CustomerViewModel>().ToSelf().WhenTargetHas<CustomerA>();
Container.Bind<CustomerViewModel>().ToSelf().WhenTargetHas<CustomerB>();

然后在您使用它们的类的构造函数中:

public class CustomerComparerViewModel
{
    public CustomerComparerViewModel([CustomerA]CustomerViewModel customerA,
                                     [CustomerB]CustomerViewModel customerB)
    {

    }
}