Как использовать MEF для инициации группы классов? - PullRequest
0 голосов
/ 02 декабря 2010

Я использую prism / mvvm / mef для своего приложения, и загрузка всех видов, отмеченных с помощью ViewExport (Region), работает хорошо (я использую StockTraderRI AutoPopulateExportedViewsBehaviour).

Теперь я хотел бы использоватьэта возможность поиска во время выполнения для инициализации некоторых других фоновых классов.

Скажем, у меня есть интерфейс

public interface ITable
{
}

И у меня есть много классов, производных от этого интерфейса.

есть ли способ как-то пометить эти производные классы и заставить MEF создать их во время выполнения и добавить их в какой-то список или контейнер?

Как в область, которая нигде не показана, я ожидаю?Как бы я достиг этого в MEF?

Ответы [ 2 ]

3 голосов
/ 02 декабря 2010

Конечно, есть! Пометьте классы, наследующие ваш интерфейс, с помощью атрибута Export, а в другом классе создайте свойство, скажем, универсального типа ObservableCollection с атрибутом [ImportMany]. Должен сделать свое дело.

1 голос
/ 03 декабря 2010

Если вы используете MEF вместо Unity, вы также можете использовать контейнерный вызов внутри вашего загрузчика:

var tables = Container.GetExportedValues<ITable>();

Контейнер является публичным свойством вашего MEFBootstrapper.

...