Ну, вы не могли бы просто загрузить ВСЕ доступные части (независимо от того, на каких клиентах они включены), но использовать отложенное создание экземпляров, либо через Lazy
или ExportFactory
с комбинацией метаданных, чтобы идентифицировать детали для вашего клиентасистема?Таким образом, вам не нужно загружать сборки по требованию, они просто готовы к работе.
Если вы хотите динамически считывать сборку из базы данных и загружать ее в AppDomain
,вы, вероятно, можете обернуть его в новую AssemblyCatalog
, но воспользуйтесь преимуществом перекомпоновки.
Например, в этой ранней версии я использовал PartCreator<T,TMetadata>
, которая превратилась в ExportFactory<T,TMetadata>
близится к выпуску (но не включенав финале .NET 4.0).Если вы измените [ImportMany]
на [ImportMany(AllowRecomposition = true)]
, в следующий раз вы добавите новый каталог, например:
((AggregateCatalog)container.Catalog).Catalogs.Add(<assembly>);
, который должен изменить набор [ImportMany]
из PartCreator
(ExportFactory
) экземпляров.
Не уверен, что это сработает ... Мне нужно понять вашу предполагаемую архитектуру, прежде чем я смогу сказать, сработает или не сработает ...