MVVM && IOC && Sub-ViewModels - PullRequest
       14

MVVM && IOC && Sub-ViewModels

0 голосов
/ 21 мая 2010

У меня есть 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 не нужно.

Как мне справиться с этим с помощью МОК? Я использую Ninject кстати.

Спасибо

Ответы [ 2 ]

1 голос
/ 28 мая 2010

Вот как это сделать в Ninject:

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

Затем в конструкторе класса вы используете их в:

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

    }
}
1 голос
/ 22 мая 2010

Я не знаком с 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)
    {

    }
}
...