2012-05-07 39 views
1

嗨我已經創建了一個簡單的主應用程序和兩個注入應用程序(InjectedApplication1和InjectedApplication2)使用一個主存儲器Simplified MEF: Dynamically Loading a Silverlight .xap使用MEF動態加載xap如何將參數傳遞給xap文件?

我想要做的是如何將主應用程序的值傳遞給注入的應用程序?

這裏是場景:我有主要應用程序,其中我需要注入xap。直到這裏一切工作正常,如上文中提到的。我需要從這裏擴展一些東西:

xap(注入一個)應該有代碼來加載某些特定ID的值。所以當我在Main應用程序(加載注入的xap的地方)加載這個xap時,我想將一個值(某些ID)傳遞給注入的XAP,以便xap將加載該特定ID的信息。

我們該如何做到這一點?

回答

2

您應該在注入的應用程序的類型上擁有Export屬性。在那些屬性中,你可以定義一個接口。具有相同接口的導出類型實現。當您使用MEF構造對象時,您將有權訪問導出的界面。您可以使用它將數據傳遞給構造的對象。

我建議在一個單獨的共享庫項目中定義接口。

如果你不能或不想這樣做,你可以使用一個事件合併器,如MVVM Light's Messenger。 Messenger具有靜態Default屬性。我很確定這兩個xap文件將共享相同的默認信使。然後您可以通過這種方式發送和接收數據。

共享庫

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.SatisfyImports(this),MyFoo將被設置爲Injected App的Foo實例。由於這實現IFoo,,您可以使用此界面與類Foo進行交互。

如果您需要更多的說明,我需要查看您的代碼。

+0

其實我是MEF的新手,我對你所說的有點了解。你能描述一下嗎?感謝您的迴應。 – WPFKK

+0

@ user841612 - 嘗試做複雜的事情時學習MEF很困難。我建議閱讀MEF:http://www.codeproject.com/Articles/376033/From-Zero-to-Proficient-with-MEF我寫這篇文章只是出於這個原因。不幸的是,我並不熟悉XAP文件來幫助你解決問題,但看起來像cadrell0可能是正確的。祝你好運。 – IAmTimCorey