突破 Silverlight 自身限制, 做更好的动态加载导航机制(一)
2011-06-23 13:29
309 查看
Silverlight 对反射的限制
在 Silverlight 中, 对反射做了很多的限制, 最大的两个限制是:只能通过反射访问 public 成员, 无法访问其它 (private, protected, internal) 成员: 这一点,暂时没有什么好的解决方案。
无法获取程序集的引用信息: 这一点, 幸好有 Mono.Cecil , 可以通过 Mono.Cecil 绕过 Silverlight 对反射的限制, 获取到程序及的引用信息。
Silverlight 对动态加载的限制
Silverlight 对动态加载的机制支持很差, 主要表现在:没有提供内置的动态加载程序集的方案, 需要开发者自己实现, 当然, 从服务端加载一个程序集很容易, 但是没有好的办法获取到程序及的引用信息, 不能自动加载程序集引用的其它程序集;
不能将动态加载到的程序集添加到当前的 Silverlight 部署程序集缓存中 (Deployment.Current.Parts) 中, 需要开发者自己对已经加载的程序及做缓存;
AppDomain.Current 不能添加动态加载的程序集信息。
Silverlight 内置导航机制的限制
Silverlight 内置了一种导航机制, 可以和浏览器导航栏无缝集成, 但是也有不少限制, 例如:导航的地址必须是用户控件 (UserControl) 或者页面 (Page) 对应的 xaml 文件, 不能是其它的用户控件;
由于 Silverlight 对反射以及动态加载的限制, 内置的导航机制不能自动加载动态加载的程序集中的控件;
不过,内置的导航可以通过实现 INavigationContentLoader 接口来完成, Frame 控件有一个 ContentLoader 属性, 这个属性的默认值是 PageResourceContentLoader 。
比较理想解决方案
比较理想的解决方案是, 将导航机制和动态加载程序集结合起来, 要实现的目标如下:Silverlight 程序集都不打包, 直接复制到 clientbin 目录下, 当然, 主程序集还是要打包的, 否则客户端 Silverlight 无法加载加载;
根据用户的选择, 从服务端按需加载对应程序集, 同时自动分析引用的程序集, 也自动从服务端加载;
扩展内置的导航机制, 使其能够载入动态加载的程序集。
写到这里, 相信有很多人对这个解决方案已经了解了, 甚至已经有了清晰地思路来实现了, 在下一篇博文中, 将贴出我的实现, 希望大家继续关注。
相关文章推荐
- 突破 Silverlight 自身限制, 做更好的动态加载导航机制(转)
- 突破 Silverlight 自身限制, 做更好的动态加载导航机制(二)
- Silverlight 的导航框架与动态加载
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务
- 类加载器[3]自定义类加载器[1]:突破父类委托机制
- Android apk动态加载机制的研究
- 关于Silverlight动态加载的疑问
- Android apk动态加载机制的研究
- Android和Linux动态加载机制
- [Java]利用反射机制动态加载并创建包含参数的对象
- Android中的动态加载机制
- Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
- Android中的class动态加载机制
- Android 反射机制动态加载模块
- 网络爬虫爬取全国省市区(动态ip代理的获取,实现对ip限制的突破)
- Silverlight调用WebService 之 Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八
- 稳扎稳打Silverlight(48) - 4.0其它之打印, 动态绑定, 增强的导航系统, 杂七杂八