为什么DirectoryModuleCatalog加载错误的模块?

时间:2018-10-10 22:40:49

标签: c# wpf prism

我在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路径中加载模块。

问题:

我该如何解决?这是正确的行为吗?

0 个答案:

没有答案