Экран-заставка Prism 4 с загрузчиком MEF - PullRequest
7 голосов
/ 20 июня 2011

У меня есть приложение Prism 4, использующее загрузчик MEF.Я реализовал заставку из загрузчика и хочу предоставить пользователю информацию о модулях (по мере их загрузки), пока менеджер модулей загружает приложение / модули.

Я думаю, что мне нужно подписаться на LoadModuleCompletedсобытие в модуле менеджера.Я не могу этого сделать, потому что когда я определяю диспетчер модулей с контейнером в загрузчике MEF, структура PRISM вызывает OnImportsSatisfied, который загружает все модули.(Это слишком поздно, так как я хочу послушать это.)

Как отобразить всплывающее окно с индикатором выполнения, отображающим информацию о модуле / прогресс?

Большое спасибо!

1 Ответ

0 голосов
/ 25 августа 2012

Если вы управляете составными частями, импортированными в ваш проект, вы можете внедрить IPartImportsSatisfiedNotification для каждой из них и заставить их сообщать о своем собственном прогрессе в некоторый импортированный класс монитора прогресса:

public interface IProgressMonitor
{
    void ReportComposed(Type type);
}

[Export(typeof(IProgressMonitor))]
public class ProgressMonitor : IProgressMonitor
{
    public ProgressMonitor()
    {
        var loadHeuristic = this.GetPreviousLoadProgress();
        if (loadHeuristic == null)
        {
            // Never been loaded before, so it's unclear how long it will take
            // Set indeterminate progress bar.
        }
        else
        {
            // Use previous load times to estimate progress.
            _loadHeuristic = loadHeuristic;
            _progress = 0;
        }
    }

    public void ReportComposed(Type type)
    {
        if (_loadHeuristic != null)
        {
            this.IncrementProgress();
        }
    }
}

[Export]
public class FooExport : IPartImportsSatisfiedNotification
{
    [Import]
    internal IProgressMonitor ProgressMonitor { get; set; }

    public void OnImportsSatisfied()
    {
        this.ProgressMonitor.ReportComposed(typeof(FooExport));
    }
}
...