我在WPF应用程序中使用Prism 6.3.0和Unity DI。主应用程序和模块是通过Visual Studio模板扩展创建的,并且Bootstrapper已更改为使用DirectoryModuleCatalog。
引导程序:
class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override IModuleCatalog CreateModuleCatalog()
{
DirectoryModuleCatalog catalog = new DirectoryModuleCatalog() { ModulePath = @".\Modules" };
return catalog;
}
}
我的模块:
public class Module1Module : IModule
{
private IRegionManager _regionManager;
private readonly ILoggerFacade _logger;
private IUnityContainer _container;
public Module1Module(IUnityContainer container, IRegionManager regionManager, ILoggerFacade logger)
{
_container = container;
_regionManager = regionManager;
_logger = logger;
}
public void Initialize()
{
_container.RegisterTypeForNavigation<ViewA>();
_logger.Log("BBC",Category.Debug,Priority.High);
}
}
编译主应用程序和模块时,将从指定的模块路径加载模块。
问题:
当我将位于ModulePath中的已编译模块(Assembly / DLL)的副本复制到MainApplication目录时,请按如下所示对模块代码进行更改,编译该模块并将新的已编译文件复制到指定的Modulepath(。 \ Modules),然后我在日志“ BBC”中看到,表示从MainApplication目录加载了模块,而不是从ModulesPath。
public class Module1Module : IModule
{
private IRegionManager _regionManager;
private readonly ILoggerFacade _logger;
private IUnityContainer _container;
public Module1Module(IUnityContainer container, IRegionManager regionManager, ILoggerFacade logger)
{
_container = container;
_regionManager = regionManager;
_logger = logger;
}
public void Initialize()
{
_container.RegisterTypeForNavigation<ViewA>();
_logger.Log("123",Category.Debug,Priority.High);
}
}
预期结果:
directorymodule目录应使用指定的路径而不是从MainApplication路径中加载模块。
问题:
我该如何解决?这是正确的行为吗?