メインの 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();
}
誰?