silverlight MEF动态调用xap包,并组合功能

Francis1024 2011-06-24 05:00:32
目前接触到silverlight MEF框架!
想达到效果是:
1.一个项目开发出了组件包(.xap包)
2.另一个项目调用 mef去下载1中开发好的.xap包
3.动态组合2中下载的包
4.实现动态调用1中方法

在网上看了很多资料,但还是很模糊,所以请懂的朋友给我指点下,有源代码最好,不要在网上下载些源码,网上的源代码我都看了很多了

最大疑问

/// <summary>
/// 加载Xap包的方法
/// </summary>
/// <param name="uri">Xap包路径</param>
/// <param name="completedAction">加载完成后的事件</param>
public void AddXap(string uri, Action<AsyncCompletedEventArgs> completedAction = null)
{
DeploymentCatalog catalog;
if (!_catalogs.TryGetValue(uri, out catalog))
{
catalog = new DeploymentCatalog(uri);

if (completedAction != null)
{
catalog.DownloadCompleted += (s, e) => completedAction(e);
}
else
{
catalog.DownloadCompleted += catalog_DownloadCompleted;
}

catalog.DownloadAsync();
_catalogs[uri] = catalog;
_aggregateCatalog.Catalogs.Add(catalog);
}
}
void catalog_DownloadCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Error != null)
{
throw e.Error;
}
}


现在我已经实现了 从1中下载xap包到 宿主应用程序,但是不知道如何去组装!

拜托大侠们给些指点!
...全文
389 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanshaoer 2011-07-19
  • 打赏
  • 举报
回复
另外,关于第四条。如果你想单独import某个方法的话,你必须要export那个方法。因为,所有的export都是将对象作为一个singleton 暴露出去的,所以不存在调用其中某个属性或方法这种思考方式。关于Export方法,可以参见http://goo.gl/T8d0d 里的Method Exports那一块。

祝好
fanshaoer 2011-07-19
  • 打赏
  • 举报
回复

_container = new CompositionContainer(_aggregateCatalog);
_container.ComposeParts(this);

写在宿主的构造函数里,之后就不需要再重新组合了,只需要下载就好
zealot112345 2011-07-15
  • 打赏
  • 举报
回复
使用import和export属性。定义自己的依赖注入的契约。然后使用compoxxxxhost类完成组装。具体类名记不清了
沝林 2011-06-24
  • 打赏
  • 举报
回复
AddXap方法已经把下载的xap添加到组件目录中了,当下载完成后,就可以导入组件了,如果执行到这里没问题,那应该是你的组件接口定义的不对,或者是导入导出的地方写的不对。

另外你说的第4条有点问题,mef组装组件后不是去调用组件的方法,mef是通过Export属性将组建中的类对象导出,然后在宿主项目中通过Import或ImportMany来导入,调试中通过查看导入的对象或对象数组的内容可以查看是否导入成功


这里有完整的示例程序,我就是按照它来修改的,完全没问题
http://www.silverlightshow.net/items/Navigating-between-Pages-in-Different-Xaps-by-using-MEF.aspx

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧