Я успешно использую загрузку модулей по требованию. в моем сценарии я загружаю их после входа пользователя в систему.
Для проверки работоспособности вашего проекта убедитесь, что файл ModuleB.dll находится в том же каталоге, что и ваша оболочка / приложение. (например, убедитесь, что он скопирован в каталог отладки, если вы находитесь в режиме отладки).
У меня имя модуля и dll модуля названы одинаково, я не уверен, является ли это требованием, но это соглашение, которое я придерживался.
мои загрузчики CreateModuleCatalog очень прост
protected override IModuleCatalog CreateModuleCatalog()
{
ModuleCatalog catalog = new ConfigurationModuleCatalog();
return catalog;
}
модули перечислены в моем файле app.config
<modules>
<module assemblyFile="PatronModule.dll" moduleType="PatronModule.PatronModuleDefinition, PatronModule" moduleName="PatronModule" startupLoaded="false" />
</modules>
затем, когда я загружаю модули, я использую этот код
IModuleManager moduleManager = _container.Resolve<IModuleManager>();
ModulesConfigurationSection modules = ConfigurationManager.GetSection("modules") as ModulesConfigurationSection;
foreach (ModuleConfigurationElement module in modules.Modules)
moduleManager.LoadModule(module.ModuleName);
Загрузка модулей должна происходить в потоке графического интерфейса, поэтому при необходимости вам нужно использовать диспетчер для загрузки (это строка, которую я использую для нее)
Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, new Action(() => { LoadModulesOnGuiThread(); }));
надеюсь, это поможет