Регистрация отдельных сообщений об ошибках для частей mef - PullRequest
1 голос
/ 23 мая 2011

Каков предпочтительный подход для регистрации ошибок отдельных деталей с импортированными деталями?Например, если у вас есть следующий контракт:

public interface IDoStuff
{
  void DoYourStuff();
}

с несколькими реализациями:

[Export(typeof(IDoStuff))]
public class DoStuffCorrectly : IDoStuff
{    
    //implement void run
}

[Export(typeof(IDOstuff))]
public class DoStuffWithExceptions : IDoStuff
{
//  implement void run and throws exception
}

и у вас есть Type, который использует mef для составления частей.

public class DoStuffRunner
{  
  [ImportMany(typeof(IDoStuff))]
  IEnumerable<IDoStuff> DoStuffPats {get;set;}

  //some method that loops through the IEnumerable and calls run
  public void Run()
  {
    foreach(IDostuff doit in DoStuffParts)
    {
      doit.Run();
    }
  }
 }

В исполняемой сборке с импортером я использую блоки приложения Entlib для обработки исключений и ведения журнала.Блок приложения регистрации настроен на отправку общих сообщений об ошибках команде.Некоторая информация, которую я хотел бы включить, - какая часть не прошла, и, возможно, какая группа получит электронное письмо.

Это достаточно просто для статической настройки в конфигурации приложения, но это приведет к конфигурации 1: 1 для каждой добавляемой части, что приведет к поражению цели удаления библиотеки DLL в корзину.Было бы неплохо, если бы вы могли контролировать конфигурацию в сборке детали.

Итак, каковы некоторые возможные подходы, которые позволили бы детали представить информацию, которая позволила бы импортированной детали предоставить информацию конфигурации журналирования, которая бы объединялас идеологией МЭФ?

1 Ответ

1 голос
/ 23 мая 2011

Способ MEF состоит в том, чтобы импортировать интерфейс регистрации в ваши плагины и / или экспортировать любые метаданные, необходимые для настройки вашего регистратора, используя настраиваемые атрибуты экспортируемого класса.

Я не совсем знаком сэта библиотека журналов (мы используем log4net), чтобы знать, какие метаданные вам нужны или как ведение журналов будет унифицировано, если вы не импортировали интерфейс интерфейса журналирования.

...