Сначала вы пытаетесь импортировать объекты в статическое свойство.Это не поддерживается MEF: MEF составляет объекты , а не классы .Если вы хотите инициализировать статические свойства, вы должны сделать это вручную следующим образом:
DllList = container.GetExports<IControlModule, IImportComponentCapabilites>();
Теперь о отложенной загрузке: DirectoryCatalog
создает AssemblyCatalog
для каждой сборки в каталоге.Реализация AssemblyCatalog
в MEF будет перечислять все типы в сборке, как только будет вызван AssemblyCatalog.Parts
, что произойдет, когда вы извлечете экспорт из контейнера.Это означает, что сборка загружается еще до того, как MEF определит, что она содержит деталь, которая ей действительно необходима.
Для того, чтобы действительно иметь отложенную загрузку сборок, потребуется информация о том, какие детали доступны в этих сборкахбыть кэшированным где-то.MEF в настоящее время не имеет такого встроенного механизма кэширования из коробки.Однако в примерах, включенных в исходный код MEF в codeplex *, есть реализация ComposablePartCatalogAssemblyCache
.
Единственное, что делает Lazy<T>
, это откладывает момент, когда конструктор части называется.Это уже может ускорить процесс, но не откладывает загрузку сборок.