Как определить порядок с помощью атрибута ImportMany? - PullRequest
3 голосов
/ 07 июня 2010

Я только вхожу в MEF, и мне было интересно, как вы могли бы определить порядок сбора, экспортируемого с помощью [ImportMany]?

Что я имею в виду, если бы у меня было два класса (Class1, Class2), которые реализуютИнтерфейс IService и каждая из реализаций находятся в двух разных библиотеках (хотя они могут быть в одной и той же), я хочу, чтобы экземпляр Class2 создавался до экземпляра Class1 в коллекции IEnumerable, определенной атрибутом ImportMany.Так что это похоже на конвейер функциональности, в котором вызовы Class2 выполняются до вызовов Class1.

Кроме того, у меня есть другой класс (Class3, который также реализует IService) в другой библиотеке, который я хочу представить позже (т.е. некоторыеутилита ведения журнала), как мне сделать это 3-м экземпляром в коллекции ImportMany?

Ответы [ 2 ]

4 голосов
/ 07 июня 2010

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

Подход Visual Studio немного отличается. Он использует OrderAttribute , обычно в сочетании с NameAttribute , чтобы позволить разработчикам указывать порядок. Затем потребитель может отсортировать разработчиков ImportMany, используя комбинацию имен и порядка, не понимая основную реализацию.

1 голос
/ 07 июня 2010

Вы можете сначала загрузить их 'Lazy', а затем проверять атрибут заказа при добавлении их в коллекцию.

Или посмотрите этот ответ , в котором есть пример того, что вы пытаетесь сделать.

...