Bil*_*ill 5 silverlight prism ondemand silverlight-oob
OnDemand Prism模块的加载是否应该在OOB场景中工作?如果是这样,我似乎无法使其发挥作用.一切都在浏览器中没有任何问题.具体来说我:在代码中注册我的模块:
protected override IModuleCatalog GetModuleCatalog() {
var catalog = new ModuleCatalog();
Uri source;
if( Application.Current.IsRunningOutOfBrowser ) {
source = IsolatedStorageSettings.ApplicationSettings[SOURCEURI] as Uri;
}
else {
var src = Application.Current.Host.Source.ToString();
src = src.Substring( 0, src.LastIndexOf( '/' ) + 1 );
source = new Uri( src );
IsolatedStorageSettings.ApplicationSettings[SOURCEURI] = source;
IsolatedStorageSettings.ApplicationSettings.Save();
}
if( source != null ) {
var mod2 = new ModuleInfo { InitializationMode = InitializationMode.OnDemand,
ModuleName = ModuleNames.mod2,
ModuleType = "mod2.Module, mod2.Directory, '1.0.0.0', Culture=neutral, PublicKeyToken=null" ),
Ref = ( new Uri( source, "mod2.xap" )).AbsoluteUri };
catalog.AddModule( mod2 );
}
// per Jeremy Likeness - did not help.
Application.Current.RootVisual = new Grid();
return ( catalog );
}
Run Code Online (Sandbox Code Playgroud)
稍后请求加载模块:
mModuleManager.LoadModule( ModuleNames.mod2 );
Run Code Online (Sandbox Code Playgroud)
并等待对该加载模块初始化期间发布的事件的响应.
模块似乎永远不会被加载,当应用程序在调试器下运行时,会出现一个消息框,指出Web服务器返回了"未找到"错误.我可以获取模块的请求URL并将其输入Firefox并下载模块没有问题.
我一直无法找到任何实际可行的参考,但似乎应该如此.我在这个主题上发现的最多的是Jeremy Likeness的博客文章,其中包括MEF中的加载模块,但在这里应用他的知识并没有帮助.
服务器是localhost(我听说它提到这可能会导致问题).服务器有一个clientaccesspolicy.xml文件 - 虽然我不认为这是必需的.我正在使用客户端堆栈并在应用程序构建期间注册它:
WebRequest.RegisterPrefix( Current.Host.Source.GetComponents( UriComponents.SchemeAndServer, UriFormat.UriEscaped ), WebRequestCreator.ClientHttp );
Run Code Online (Sandbox Code Playgroud)
后续问题:
可以通过某种方式将所有xaps安装到客户端桌面 - 或者只安装主应用程序xap?不知怎的,在appmanifest.xml中指定它们?
如果只安装了application.xap并且必须下载其他的xaps,是否值得这样做?
小智 1
有一次我做过类似的场景。诀窍是将模块存储在独立存储中,并使用在离线工作时从独立存储中读取的模块加载器。
这是因为否则,您将无法下载与 Shell 不同的 .xap 文件中的模块。
谢谢,达米安
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |