Mvvm 使用MEF动态加载xap时,如何向xap文件传递参数?

Mvvm 使用MEF动态加载xap时,如何向xap文件传递参数?,mvvm,silverlight-4.0,mef,Mvvm,Silverlight 4.0,Mef,您好,我使用一个算法创建了一个简单的主应用程序和两个InjectedApplication(InjectedApplication 1和InjectedApplication 2) 然后我想做的是如何将值从主应用程序传递到注入的应用程序 下面是一个场景:我有一个主应用程序,我在其中按需注入xap。直到这里,一切都很好,正如上面的文章所提到的。我需要在此基础上扩展一些内容: xap(注入的xap)应该有代码来加载某些特定ID的值。因此,当我在主应用程序(加载注入的xap的地方)中加载此xap时,我

您好,我使用一个算法创建了一个简单的主应用程序和两个InjectedApplication(InjectedApplication 1和InjectedApplication 2)

然后我想做的是如何将值从主应用程序传递到注入的应用程序

下面是一个场景:我有一个主应用程序,我在其中按需注入xap。直到这里,一切都很好,正如上面的文章所提到的。我需要在此基础上扩展一些内容:

xap(注入的xap)应该有代码来加载某些特定ID的值。因此,当我在主应用程序(加载注入的xap的地方)中加载此xap时,我希望将一个值(一些ID)传递给注入的xap,以便xap加载该特定ID的信息

我们如何实现这一点???

您应该在注入的应用程序的类型上具有属性。在这些属性中,可以定义接口。让导出的类型实现相同的接口。使用MEF构造对象时,可以访问导出的接口。可以使用它将数据传递给构造的对象

我建议在单独的共享库项目中定义接口

如果您不能或不想这样做,可以使用事件聚合器(如Messenger)。Messenger具有静态
默认属性。我很确定这两个xap文件将共享相同的默认Messenger。然后,您可以通过这种方式发送和接收数据

示例

共享库

public interface IFoo
{
    object Data { get; set; }
}
注入式应用程序

[Export(typeof(IFoo))]
public class Foo : IFoo
{
    public object Data { get; set; }
}
主应用程序

public class Bar
{
    [Import]
    public IFoo MyFoo { get; set; }
}
现在,当您在
Bar
上调用
CompositionInitializer.satisfyiImports(this)
时,
MyFoo
将从Injected App设置为
Foo
的实例。因为这实现了
IFoo,
您可以使用此接口与类
Foo
交互


如果您需要更多的说明,我需要查看您的代码。

事实上,我是MEF的新手,从您所说的话中我了解了一点。你能再描述一下吗?感谢您的回复。@user841612-在尝试做复杂事情的同时学习MEF是很困难的。我建议大家阅读一下MEF:我写这篇文章就是为了这个原因。不幸的是,我在XAP文件方面不够熟练,无法帮助您解决这方面的问题,但看起来cadrell0可能走上了正确的道路。祝你好运