Динамическая загрузка интерфейсов с помощью MEF

У меня есть следующие 3 интерфейса:

    public interface IWcfSvc

    public interface IAdventureWorks : IWcfSvc
    public interface INorthwind : IWcfSvc

Они все в своих сборках. Я хотел бы знать, как я могу использовать MEF для загрузки IAdventureWorks и INorthwind? Как вы, возможно, уже поняли, IWcfSvc — это интерфейс по умолчанию для всех других интерфейсов, которые будут использоваться WCF в качестве ServiceContracts.

До сих пор я мог использовать MEF для одного конкретного интерфейса, но я хотел бы сделать его динамическим, так как служба WCF будет размещаться самостоятельно, и должна быть возможность добавлять новые службы без изменения ядра самообслуживания. услуга.


person BlueIced    schedule 17.03.2014    source источник


Ответы (1)


Эта ситуация напоминает мне способ IClassifierProvider зарегистрирован в Visual Studio SDK. Хотя многие поставщики классификаторов могут быть экспортированы в Visual Studio и ее многочисленные расширения, в целом очень немногие (возможно, только один) применяются к любому отдельному документу, который вы открываете для редактирования. Чтобы связать определенный экспорт IClassifierProvider с ограниченным числом документов, атрибут метаданных применяется к экспорту, например как следующее:

[Export(typeof(IClassifierProvider))]
[ContentType("My Content Type")]
public class MyClassifierProvider : IClassifierProvider

Атрибуты метаданных эффективны и хорошо поддерживаются внутри MEF. В своем приложении вы можете предоставить их пользователям одним из следующих способов:

  1. Используйте стандартный атрибут ExportMetadataAttribute. Если бы это сделала Visual Studio, это могло бы выглядеть следующим образом.

    [Export(typeof(IClassifierProvider))]
    [ExportMetadata("Content Type", "My Content Type")]
    public class MyClassifierProvider : IClassifierProvider
    
  2. Создайте настраиваемые атрибуты, отражающие определенные метаданные, которые вы ожидаете от своих расширений.

person Sam Harwell    schedule 17.03.2014