0

我创建了一个 Silverlight 业务应用程序,它作为我的主要 silverlight 页面运行。对于“菜单”上的每个超链接按钮,我都会启动另一个 Silverlight 应用程序,该应用程序在 Visual Studio 中创建为不同的项目。这些是非业务应用程序。

一切运作良好。但是,我试图将一个值从我的主 SL 应用程序传递到内部的 SL 应用程序。我一直在谷歌上搜索,但找不到答案。据我了解,InitParam 在 ASP 和 SL 之间使用,而不是在 SL 应用程序之间使用。由于为第一个 SL 应用程序启动了应用程序配置,而第二个应用程序的应用程序配置从未启动,因此我无法使用它(至少这是我的理解)

我要传递的值是登录名和角色,可以从 Silverlight 业务应用程序中的 webcontext 中获取,但我无法在内部运行的非业务应用程序中获取 webcontext。

这就是我在主 SL 应用程序中启动我的 SL 应用程序的方式:

    public Customers()
    {
        InitializeComponent();

        this.Title = ApplicationStrings.CustomersPageTitle;

        if (WebContext.Current.User.IsInRole("Users") || WebContext.Current.User.IsInRole("Administrators"))
        {
        WebClient client = new WebClient();
        client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
        client.OpenReadAsync(new Uri("customers.xap", UriKind.Relative));
        }
    }

    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        string appManifest = new StreamReader(Application.GetResourceStream(new StreamResourceInfo(e.Result, null),
            new Uri("AppManifest.xaml", UriKind.Relative)).Stream).ReadToEnd();

        XElement deploymentRoot = XDocument.Parse(appManifest).Root;
        List<XElement> deploymentParts =
            (from assemblyParts in deploymentRoot.Elements().Elements() select assemblyParts).ToList();

        Assembly asm = null;
        AssemblyPart asmPart = new AssemblyPart();
        foreach (XElement xElement in deploymentParts)
        {
            string source = xElement.Attribute("Source").Value;
            StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(e.Result, "application/binary"), new Uri(source, UriKind.Relative));

            if (source == "customers.dll")
            {
                asm = asmPart.Load(streamInfo.Stream);
            }
            else
            {
                asmPart.Load(streamInfo.Stream);
            }
        }

        UIElement myData = asm.CreateInstance("customers.MainPage") as UIElement;
        stackCustomers.Children.Add(myData);
        stackCustomers.UpdateLayout();
    }

任何人?

4

1 回答 1

0

我同意 ChrisF,我认为 Prism 或 MEF 可以解决你的问题。无论如何,在网上做一些搜索并寻找这两个类:**

LocalMessageSender
LocalMessageReceiver

**

祝你好运

于 2012-11-01T17:47:01.343 回答