[英]How do I export and import application services with say MEF?
我現在正在和MEF合作,但我正在尋找的答案可能與MEF無關 - 這都是依賴注入 - 我只是在這里使用MEF術語作為例子。
簡短的背景故事,我在MSDN上閱讀了這篇文章,重點是復合應用程序
在這個圖中有三個東西,shell,應用程序服務和模塊。 這是一個復合應用程序。
(來源: microsoft.com )
我沒有完全得到的是應用服務部分。 什么是服務,它是什么樣的? 如何通過模塊公開服務以及如何使用不同模塊的服務?
我真的很想看到一些簡潔的小代碼示例,沒有任何花哨的東西可以用來說明這一切是如何實現的(應用程序服務部分)。
就MEF而言,應用服務只是另一個可組合的部分。 您可以編寫的任何接口或類都可以充當服務。
每個服務都有一些您想要實現的接口或基類。 您可以通過某種類型的IService
接口進行這些[ImportMany]
(並使用[ImportMany]
將它們全部導入),但通常,您需要不同的服務類型。
然后,您可以根據需要將其導入到您的課程中。 例如,假設您有一個用於服務的通用接口庫,並且您提供:
public interface IDataRepostory
{
public IList<MyType> MyTypes { get; }
}
然后,您可以使用單獨的庫導出特定類型:
[Export(typeof(IDataRepository))]
public class Repository: IDataRepostory
{
// implement interface for this specific "service"
}
然后,您的主程序將能夠根據需要導入它,並針對它編寫代碼。 例如,假設您想要顯示客戶,則需要從數據層加載客戶。 如果要通過存儲庫加載,可以將存儲庫導入應用程序的特定部分:
public class CustomersViewModel
{
[Import]
public IDataRepository
{
get; set;
}
// ...
}
然后,您將直接將此服務組合到您的應用程序中。
這被視為“應用程序服務”,因為它是某些通用服務的特定於應用程序的實現 - 它不是與視圖相關的組件,並且可以在整個應用程序中使用。
聲明實現此接口的服務和導出類的接口。 例如,您可能擁有在共享程序IPersonBuilder
聲明的IPersonBuilder
。 你的主模塊有MyPersonBuilder
實現接口並導出它。 所有視圖都使用導入IPersonBuilder
來調用方法,並使用MEF組合,他們將能夠從您的主模塊調用MyPersonBuilder
上的說CreatePerson()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.