1

嗨,我使用简化的 MEF:动态加载 Silverlight .xap创建了一个简单的主应用程序和两个 InjectedApplications(InjectedApplication1 和 InjectedApplication2) 。

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

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

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

我们怎样才能做到这一点?

4

1 回答 1

2

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

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

如果您不能或不想这样做,您可以使用事件聚合器,例如MVVM Light 的Messenger。Messenger 具有静态Default属性。我很确定这两个 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; }
}

现在,当您调用CompositionInitializer.SatisfyImports(this)BarMyFoo将设置为Foo来自 Injected App 的实例。因为这实现IFoo,了你可以使用这个接口与类进行交互Foo

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

于 2012-05-07T19:02:34.397 回答