0

我正在使用 IModuleManager 按需实现 Unity PRISM 模块。假设有多个点需要模块的功能。moduleManager.LoadModule("MyModule")即使模块之前可能已经加载,我是否有权在这些点上调用?它不会重新加载是吗?

这是最佳实践吗?

谢谢

4

2 回答 2

1

当您查看Prism 模块化快速入门时

你会发现这个方法负责加载模块

    protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
    {
        base.OnMouseLeftButtonUp(e);

        if (!e.Handled)
        {
            if ((this.moduleTrackingState != null) && (this.moduleTrackingState.ExpectedInitializationMode == InitializationMode.OnDemand) && (this.moduleTrackingState.ModuleInitializationStatus == ModuleInitializationStatus.NotStarted))
            {
                this.RaiseRequestModuleLoad();
                e.Handled = true;
            }
        }
    }

请注意,有一个条件阻止调用this.RaiseRequestModuleLoad(); when ModuleInitializationStatusis not ModuleInitializationStatus.NotStarted

我试图摆脱它并发现以下内容:

  1. moduleManager.LoadModule("YourModule");多次调用不会抛出异常。

  2. 模块的Initialize方法仅在您第一次加载模块时被调用。

模块加载意味着模块组件从磁盘传输到内存中。所以...如果每次都重新加载你真的不应该那样做。只是为了回答您的问题“这是最佳做法吗?” 我不得不说......这肯定不是。我无法告诉您每次调用时是否都会重新加载它,moduleManager.LoadModule("YourModule");但恕我直言,您应该只加载一次模块,因为它们也执行一次。

于 2013-01-14T12:06:15.190 回答
-2

同意 Viktor,此线程中的响应建议不要调用 LoadModule,而是使用 IModuleCatalog 和 IModuleManager 检查 ModuleState。

这是该帖子的代码片段:

(...)

 var module = this.moduleCatalog.Modules.FirstOrDefault(m => m.ModuleName == "MyModule");
            if (module != null)
            {
                if (module.State != ModuleState.Initialized)
                {
                    moduleManager.LoadModuleCompleted += moduleManager_LoadModuleCompleted;
                    moduleManager.LoadModule("MyModule");
                }
                else
                {

                    //Initialization logic

                }
            }
        }

        void moduleManager_LoadModuleCompleted(object sender, LoadModuleCompletedEventArgs e)
        {
            moduleManager.LoadModuleCompleted -= moduleManager_LoadModuleCompleted;

            if (e.ModuleInfo.ModuleName == "MyModule")
            {
                //Initialization logic
            }
        }

(...)
于 2013-01-18T05:02:23.480 回答