Как заставить Calburn.Micro использовать мой многопараметрический конструктор?

Когда у меня есть настройка модели представления с ImportingConstructor, который принимает один параметр, вызывается конструктор, и экран отображается правильно. Пример:

    [ImportingConstructor]
    public ShellViewModel(IEventAggregator events)
    {
        events.Subscribe(this);
    }

Однако, судя по примерам из Caliburn.Micro, я должен предоставить другой конструктор с N параметрами. Пример:

    [ImportingConstructor]
    public ShellViewModel(LeftViewModel left, RightViewModel right, IEventAggregator events)
    {
        Left = left;
        Right = right;

        events.Subscribe(this);
    }

Но эта версия конструктора никогда не вызывается в моей песочнице. Я скомпилировал и запустил пример кода из Caliburn.Micro, который делает именно это; вызывает многопараметрический конструктор. (См. пример проекта Caliburn.Micro "HelloEventAggregator").

Действительно, когда я запускаю свой код песочницы (вторая версия), конструктор не вызывается, а в качестве начального отображения выбирается другая ViewModel. Но в образце HelloEventAggregator их модель представления оболочки создается и отображается первой.

Что мне нужно сделать, чтобы заставить Caliburn.Micro вызвать мой многопараметрический конструктор и показать правильное представление?


person EtherDragon    schedule 12.07.2011    source источник
comment
Нашел ответ, просто жду, пока истечет таймер, чтобы опубликовать его...   -  person EtherDragon    schedule 12.07.2011


Ответы (1)


Проблема возникла из-за того, что у меня было установлено более одной модели представления с

[Export(typeof(IShell))]

Тип экспорта должен быть таким, какой ожидает ваш [ImportingConstructor], чтобы этот контракт был удовлетворен.

Пример — ShellViewModel

[Export(typeof(IShell))]
public class ShellViewModel : PropertyChangedBase, IShell
{
    [ImportingConstructor]
    public ShellViewModel(LeftViewModel leftModel)
    {
        ...
    }
    ...
}

Пример — модель лефтвиевмодел

[Export(typeof(LeftViewModel))]
public class LeftViewModel : PropertyChangedBase, IShell
{
    [ImportingConstructor]
    public LeftViewModel(IEventAggregator events)
    {
        events.Subscribe(this);
        ...
    }
    ...
}
person EtherDragon    schedule 13.07.2011