我如何使用MEF将我的项目分割成更小的xap并动态下载它们?

本文关键字:xap 动态 下载 MEF 何使用 我的 分割 项目 | 更新日期: 2023-09-27 18:02:08

现在,我的XAP文件已经变大了,我需要一个解决方案将它分割成一些更小的应用程序。MEF或PRISM可能解决我的问题

我阅读并观看了它们的在线教程,但仍然不知道如何将它们应用到我当前的项目中。

让我解释一下我的项目:

-在主页中。xaml只有一个菜单控件。但是,该菜单控件将基于通过服务调用检索到的数据动态构建。你可以看到我的菜单图片

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

-每次用户单击菜单项时,该菜单项的窗口将弹出,让用户进行业务工作。你可以在我的GeneralLedger_JournalPosting图片上看到。journalPosting菜单项属于GeneralLedger部分。

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

这是显示如何通过菜单控件

上的菜单项的单击事件显示弹出菜单项窗口的代码
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变大了。

解决方案:

我正在考虑一种方法来分离我的每个窗口菜单项屏幕(如GeneralLedger_JournalPosting)到单独的XAP。我的主XAP文件将只包含menuControl。

然而,我需要知道如何加载我相应的menuItem XAP文件的方法,如果用户点击一个menuItem(例如GeneralLedger/JournalPosting)。然后打开JournalPosting界面

但是如果用户再次点击该菜单项,则不需要下载。看看cache

(我看了MEF教程,知道我需要为这个特性使用DeloymentCatalog。但是,我没有看到任何示例让我们通过代码手动访问动态XAP文件中的用户控件)

其次,

因为我的每个菜单项窗口屏幕将使用相同的第三方dll(例如:GridView, Navigation,…的dll)。所以你也可以告诉我如何让我只下载那些dll一次。因为如果我把这些dll放入我的每个菜单项窗口屏幕XAP,那么我认为每次请求下载相应的XAP时,它们都会被重新下载

谢谢你的帮助。

我如何使用MEF将我的项目分割成更小的xap并动态下载它们?

请看:http://www.codeproject.com/KB/silverlight/MEFDynamicLoading.aspx。这个项目描述了如何按需加载xap并在下载后显示它们。

您感兴趣的部分是MainPageModel.cs。加载xap并将内容放入面板。因此,如果您要求DeploymentCatalogService"AddXap",并且它已经加载=>调用回调或触发事件。

关于dll的。你必须把它们放在MainApp中。在你下载的应用程序中,你必须在MainApp定义的dll中设置CopyLocal = false(这是在dll的属性中找到的)

我希望这对你有帮助!

BR,

TJ