Службы приложений, с точки зрения MEF, являются еще одной составной частью. Любой интерфейс или класс, который вы можете создать, может действовать как сервис.
Каждый сервис будет иметь некоторый интерфейс или базовый класс, который вы хотите реализовать. Вы можете сделать это массово через некоторый тип интерфейса IService
(и использовать [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;
}
// ...
}
Затем вы включили бы эту услугу непосредственно в ваше приложение.
Это считается «Службой приложений», потому что это специфичная для приложения реализация некоторой универсальной службы - это не связанный с представлением компонент, и он может использоваться во всем приложении.