0

メインの Silverlight ページとして実行される Silverlight ビジネス アプリケーションを作成しました。「メニュー」のハイパーリンク ボタンごとに、Visual Studio で別のプロジェクトとして作成された別の Silverlight アプリケーションを起動します。これらは非ビジネス アプリケーションです。

すべてがうまくいっています。ただし、メインの SL アプリケーションから内部の SL アプリケーションに値を渡そうとしています。私はたくさんグーグルで検索してきましたが、答えが見つかりません。私が理解しているように、InitParam は ASP と SL の間で使用され、SL アプリ間では使用されません。最初の SL アプリのアプリ構成が起動され、2 番目のアプリケーションのアプリ構成が起動されないため、それを使用することはできません (少なくとも私の理解では)。

渡したい値は、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があなたの問題を解決できると思います. とにかく、Web で検索して、次の 2 つのクラスを探してください: **

LocalMessageSender
LocalMessageReceiver

**

幸運を

于 2012-11-01T17:47:01.343 に答える