2011-08-31 27 views
1

我有以下的情況。添加自定義容器使用MEF來MEF

我由很多模塊構建我的解決方案,在不同的dll存在的每個模塊。我使用MEF作爲構建我所有項目的選擇。 其工作正常,但有時我添加了一個模塊服務類說(AppService服務),這個類只是具有應對這一特定模塊的通用服務定義靜態方法。現在在這個方法中,我需要一些已經在MEF中編寫的服務。 MEF容器已經存在於郵件外殼程序中。 如何才能得到我需要的參考資料。如果我使用[導入],它不起作用。 例子:

public class AppService 
{ 
    [Import] 
    public IService MyService {get;set;} 

    public static int Calc() 
    { 
     return MyService.Calc(); //My service is null 
    } 
} 

在此先感謝...

回答

2

我覺得你確實有該代碼的幾個問題。

1.Have您確認您的AppService類型正在由?因爲你不是[Export]-它,我看不到如何生成。如果不從容器抓的AppService一個實例,你必須手動滿足進口:

var service = new AppService(); 
container.ComposeParts(service); 

2.您一流的設計有一個static方法,您試圖訪問一個instance屬性。我假設你正在嘗試這個原因有兩個。要麼,你承擔interfaceIService支持靜態操作(這是他們不能),或者你撥打的支持IService類型的擴展方法,這是失敗,因爲涉嫌擴展方法的第一個參數爲空:

public static int Calc(this IService service) 
{ 
    return service.Calc(); // failing perhaps? 
} 

如果是後者的擴展方法的情況下,它會建議類似1,你需要確認它實例化後,您AppService類型正在由東西)。

你有一個static方法試圖訪問一個instance屬性會告訴我,你可能總有需要重新考慮你的設計,並刪除static修改的事實:

public int Calc() 
{ 
    return MyService.Calc(); 
} 

但同樣,你的財產是公開的,這種方法有什麼用處? 你當前的例子甚至不應該編譯,因爲你試圖從一個靜態方法訪問一個實例屬性。