Mef импортирует все типы, реализующие интерфейс, указанный во время выполнения - PullRequest
3 голосов
/ 24 февраля 2011

Могу ли я написать класс для использования mef для импорта всех типов, реализующих определенный интерфейс, а затем указать этот интерфейс во время выполнения.(я знаю, что мне нужно пометить разработчиков с экспортом)

Пример использования:

IEnumerable<IExcitingClass> excitingClasses = ClassImporter<IExcitingInterface>.ImportAllFrom(specifyDirectory);

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Во время выполнения вы можете использовать только строку для указания вашего интерфейса.

    public IEnumerable<object> GetAllInheritors(string interfaceName)
    {
        Assembly assembly = this.GetType().Assembly;
        foreach (var part in Container.Catalog.Parts)
        {
            Type type = assembly.GetType(part.ToString());
            if (type != null)
                if (type.GetInterface(interfaceName) != null)
                {
                    yield return part.CreatePart().GetExportedValue(part.ExportDefinitions.First());
                }
        }
    }
1 голос
/ 24 февраля 2011

Вы можете создать контейнер, используя DirectoryCatalog, и вызвать container.GetExportedValues<IExcitingClass>. Это то, что вы хотите?

...