您好我使用aritcle Simplified MEF: Dynamically Loading a Silverlight .xap创建了一个简单的主应用程序和两个InjectedApplications(InjectedApplication1和InjectedApplication2)。
我想要做的是如何将值从主应用程序传递给注入的应用程序?
以下是该场景:我有主应用程序,其中我按需注入xap。直到这里,一切正常,如上文所述。我需要从那里扩展一些东西:
xap(注入一个)应该有代码来加载某些特定ID的值。因此,当我在主应用程序中加载此xap(加载注入的xap的位置)时,我想将值(某些ID)传递给注入的XAP,以便xap将加载该特定ID的信息。
我们怎样才能实现这个目标?
答案 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
进行交互。
如果您需要进一步说明,我需要查看您的代码。