Как я могу использовать MEF, чтобы разделить мой проект на меньший xap и загрузить их на лету? - PullRequest
0 голосов
/ 16 июля 2011

Сейчас мой XAP-файл стал большим, и мне нужно решение, чтобы разделить его на несколько небольших приложений. MEF или PRISM могут решить мою проблему

Я читаю и смотрю онлайн-учебник для них, но до сих пор не понимаю, как я могу применить их к моему текущему проекту.

Позвольте мне объяснить мой проект:

-В mainpage.xaml, он имеет только один контроль меню. Однако это управление меню будет построено ДИНАМИЧЕСКИ на основе данных, полученных посредством вызова службы. Вы можете увидеть в моем меню изображение

http://www.flickr.com/photos/31396433@N08/sets/72157627077751863/

-Каждый раз, когда пользователь щелкает по пункту меню, всплывающее окно этого пункта меню позволяет пользователю выполнять свою бизнес-работу. Вы можете видеть на моей картинке GeneralLedger_JournalPosting. Элемент menuPosting menu принадлежит разделу GeneralLedger.

http://www.flickr.com/photos/31396433@N08/sets/72157627077751863/

Это код, показывающий, как я показываю всплывающее окно menuItem через событие щелчка menuItem в menuControl

private void MenuItemClick(object sender, RadRoutedEventArgs args)
    {
        RadMenuItem item = args.OriginalSource as RadMenuItem;
        SFMenu sFMenu = item.Header as SFMenu;
        OpenMenuItemScreenBy(sFMenu.Name);

    }   

    private void OpenMenuItemScreenBy(string menuName)
    {
        if (menuName == "User Management")
        {
            var userManagement = new UserManagement();
            //userManagement.WindowStartupLocation = WindowStartupLocation.Manual;
            userManagement.Top = 50;

            userManagement.Show();
        }
        //Testing area
        else if (menuName == "Testing")
        {
            Testing t = new Testing();
            t.Top = 50;
            t.Show();
        }
        //
        ......
        .......

Это все о моем проекте. По сути, мне просто нужно создать разные экраны для каждого элемента меню. Потому что количество моих пунктов меню продолжает увеличиваться, поэтому необходимо создать более соответствующий экран окна. И это делает мой XAP больше.

Решение:

Я думаю о способе разделения каждого из моих оконных элементов Window MenuItem (например, GeneralLedger_JournalPosting) на отдельный XAP. И мой основной файл XAP будет содержать только menuControl.

Однако мне нужно знать, как загрузить соответствующий XAP-файл menuItem на лету, если пользователь щелкнет по элементу menuItem (например, GeneralLedger / JournalPosting). И откройте экран JournalPosting

Но если пользователь снова щелкнет по этому пункту меню, загрузка не требуется. Просто посмотрите на кеш

(я смотрю учебное пособие по MEF и знаю, что для этой функции мне нужно использовать DeloymentCatalog. Однако я не вижу ни одного примера, чтобы позволить нам вручную получить доступ через код usercontrol в динамическом файле XAP)

Во-вторых,

Потому что каждый экран моего меню menuItem будет использовать одну и ту же стороннюю DLL (например: DLL для GridView, Navigation, ...). Так что вы также можете сказать мне, как разрешить мне загружать только эти ОДИН раз. Потому что, если я помещу эти dll в каждый из XAP-окон моего меню menuItem, то я думаю, что они будут перезагружаться каждый раз, когда соответствующий XAP запрашивает загрузку

спасибо за вашу помощь.

1 Ответ

0 голосов
/ 17 июля 2011

посмотрите здесь: http://www.codeproject.com/KB/silverlight/MEFDynamicLoading.aspx. Этот проект описывает, как загружать xap по требованию и отображать их после загрузки.

Интересная часть для вас - MainPageModel.cs.Существует загрузка xap и помещение содержимого в панель. Так что, если вы попросите DeploymentCatalogService «AddXap», и он уже загружен =>, вызовите обратный вызов или вызовите событие.

Относительно библиотеки DLL.Вы должны положить их в свой MainApp.В загруженных вами приложениях вы должны установить в MainApp определенные dll's на CopyLocal = false (находится в Свойствах dll (Ссылки))

Надеюсь, это поможет!

BR

тДж

...