我有一個基於Prism(v4 ctp)和MEF的應用程序。 該應用程序有一個服務IService1。我希望此服務實現由某個模塊導出(不僅僅由MEF發現)棱鏡+ MEF:延遲棱鏡模塊的服務出口
public interface IService1 {}
public class Service1Impl: IService1 {}
Service1Impl沒有ExportAttribute。這種因爲我想手動創建實現我的棱鏡模塊:
[ModuleExport(typeof(SomeModule))]
[PartCreationPolicy(CreationPolicy.Shared)]
public SomeModule: IModule
{
[Export]
public IService1 Service1 {get; private set}
public void Initialize()
{
Service1 = new Service1Impl();
}
}
在我想通過MEF導入IService1的實現一些其他組件。 問題是如何在Prism調用Initialize之後告訴MEF執行導出操作(在SomeModule中)?
如果我在模塊的構造函數中創建服務的實現,那麼一切正常,但它與Prism的模塊初始化過程不一致。 事情是,在MEF的作文完成後,Prism會初始化模塊。 此外,在創建服務的實現之前,我需要執行一些複雜的初始化邏輯,我不希望它在構造函數中。
那麼,我有什麼選擇?
謝謝,但說實話,我不喜歡這種做法,因爲它創造了誰出口服務,誰服務進口模塊組件之間的依賴性。我相信這並不好。 – Shrike 2010-09-23 16:55:19
@Shrike你已經有一個隱式的依賴。您希望服務實現由另一個模塊提供,並且如果它不在那裏,則某些部分流程會失敗。這就是爲什麼我發佈「作爲一邊」部分......你需要解決你的模塊之間的依賴關係。我也不喜歡ModuleDependency,但是您必須以某種方式解決隱含的依賴關係。如果不是ModuleDependency,那麼我列出的其他方法之一。 – 2010-09-23 19:14:01