使用MEF动态加载xap时如何将参数传递给xap文件?

时间:2012-05-07 18:42:08

标签: mvvm silverlight-4.0 mef

您好我使用aritcle Simplified MEF: Dynamically Loading a Silverlight .xap创建了一个简单的主应用程序和两个InjectedApplications(InjectedApplication1和InjectedApplication2)。

我想要做的是如何将值从主应用程序传递给注入的应用程序?

以下是该场景:我有主应用程序,其中我按需注入xap。直到这里,一切正常,如上文所述。我需要从那里扩展一些东西:

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

我们怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:2)

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

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

如果您不能或不想这样做,您可以使用像MVVM Light's Messenger这样的事件整合器。 Messenger具有静态Default属性。我很确定这两个xap文件将共享相同的Default 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; }
}

现在,当您在CompositionInitializer.SatisfyImports(this)上致电Bar时,MyFoo将从注入的应用中设置为Foo的实例。因为这实现了IFoo,,所以您可以使用此界面与类Foo进行交互。

如果您需要进一步说明,我需要查看您的代码。