c# - 从 dll 文件加载 Prism 模块(在启动时)

标签 c# .net prism prism-4

在我的应用程序中我喜欢这样的 Atm:

class Bootstrapper : UnityBootstrapper
    {
        protected override DependencyObject CreateShell()
        {
            return Container.Resolve<Shell>();
        }

        protected override void InitializeShell()
        {
            base.InitializeShell();

            App.Current.MainWindow = (Window)Shell;
            App.Current.MainWindow.Show();
        }     

        protected override void ConfigureModuleCatalog()
        {            
            base.ConfigureModuleCatalog();
            var moduleCatalog = (ModuleCatalog)ModuleCatalog;

            moduleCatalog.AddModule(typeof(FooModule));
            moduleCatalog.AddModule(typeof(BarModule));
        }        
    }

我想通过指示 dll 文件的路径来加载 FooModule 和 BarModule,如下所示:

protected override void ConfigureModuleCatalog()
{
...
            var assembly = Assembly.LoadFrom(@"libs\FooLib.dll");
            var type = assembly.GetType("FooLib.FooModule");
            moduleCatalog.AddModule(type);
...
}

但它不起作用,我在 Bootstrapper.Run() 上收到此错误消息:

ModuleManager 中目前没有可以检索指定模块的 moduleTypeLoader。

编辑: 这是我的 FooModule:

public class FooModule : IModule
    {
        private readonly IRegionViewRegistry _regionViewRegistry;

        public FooModule(IRegionViewRegistry registry)
        {
            _regionViewRegistry = registry;
        }

        public void Initialize()
        {
            _regionViewRegistry.RegisterViewWithRegion("MainRegion", typeof(Main));
        }
    }

最佳答案

好的,试着让你的 ConfigureModuleCatalog 看起来像这样:

protected override void ConfigureModuleCatalog()
{
    string path = @"libs\FooLib.dll";
    var assembly = Assembly.LoadFrom(path);
    var type = assembly.GetType("FooLib.FooModule");
    ModuleCatalog.AddModule(new ModuleInfo
                                {
                                    ModuleName = type.Name,
                                    ModuleType = type.AssemblyQualifiedName,
                                    Ref = new Uri(path, UriKind.RelativeOrAbsolute).AbsoluteUri
                                });


}

关键是:

Ref = new Uri(path, UriKind.RelativeOrAbsolute).AbsoluteUri    

prism 检查 Ref 属性是否引用物理文件 (file://) 并从该文件加载程序集。

关于c# - 从 dll 文件加载 Prism 模块(在启动时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9973546/

相关文章:

c# - EF Core 以编程方式更改隔离级别?

silverlight - RegionManager.Regions 从不包含我的 ChildWindow 区域

mvvm - 将导航服务注册到框架元素而不是页面 - WinRt Prism 2.0

c# - 从 C#/ExcelDNA 代码调用其他 xll 文件

c# - 如何从gridview中删除空行

c# - 如何以随机顺序显示字典中的项目,但没有两个相邻的项目相同

asp.net - IIS 中的远程过程调用失败 Excel

.net - HttpMethod 中缺少 Web API 路由约束补丁

xaml - Prism MVVM 绑定(bind)到用户控件依赖属性

c# - 在 Visual Studio 2013 中添加对我的单元测试项目的引用时出错