代码之家  ›  专栏  ›  技术社区  ›  Sami Lamti

使用MvvmCross进行棱镜模块管理

  •  1
  • Sami Lamti  · 技术社区  · 11 年前

    我希望能够加载Prism模块(或等效模块(Mvx插件?)),同时使用MvvmCross进行其他操作。我该怎么做?

    更长版本: 我正在寻找一种方法来结合MvvmCross的优点(作为跨平台,具有良好的ViewModel导航),为我的WPF应用程序添加一些Prism的喜爱。我特别希望为区域和模块管理提供支持。

    据我所知,使用自定义MvxPresenter,我可以在Prism中完成区域管理支持为我做的事情(如果我错了,请纠正我)。然而,如果不使用Prism引导程序,我无法理解如何允许动态加载模块(其他组件)。我不想使用它的原因是,我需要Mvx的引导程序(安装程序)来完成它的任务——启动我的跨平台应用程序。

    提前感谢!:-)

    1 回复  |  直到 11 年前
        1
  •  2
  •   Community davidgyoung    7 年前

    MvvvmCross无法在所有平台上进行真正的动态加载,因为Xamarin.iOS平台不允许这样做(安卓平台也让它变得困难,例如,请参阅 Dynamicly resolving Assemblies without the file name )

    MvvmCross目前最接近这一点的是插件框架,它使用引导文件来确定要加载哪些模块。

    此序列起始于 https://github.com/MvvmCross/MvvmCross/blob/v3/Cirrious/Cirrious.MvvmCross/Platform/MvxSetup.cs#L132

        protected virtual void PerformBootstrapActions()
        {
            var bootstrapRunner = new MvxBootstrapRunner();
            foreach (var assembly in GetBootstrapOwningAssemblies())
            {
                bootstrapRunner.Run(assembly);
            }
        }
    

    这个 MvxBootstrapRunner 此方法调用时使用反射来查找、创建并调用任何 IMvxBootstrapAction 指定程序集列表中的具体类-默认情况下,该列表只是UI程序集。其代码为: https://github.com/MvvmCross/MvvmCross/blob/v3/CrossCore/Cirrious.CrossCore/Platform/MvxBootstrapRunner.cs#L17

    目前 Mvx引导程序运行程序 只真正用于插件,我怀疑如果你愿意,你可以将你的模块建立在这个插件框架内。

    或者,引导运行程序的设计意图是,它可以很容易地适应任何启动操作,因此您应该能够使用以下模板构建自己的基于引导的类:

       public class ModuleBootstrapAction<TModule>
          : IMvxBootstrapAction
          where TModule : IModule, new()
       {
           public virtual void Run()
           {
               Mvx.CallbackWhenRegistered<IModuleCatalog>(RunAction);
           }
    
           protected virtual void RunAction()
           {
               var catalog = Mvx.Resolve<IModuleCatalog>();
               catalog.Add(new TModule());
           }
       }
    
       public class Module1BootstrapAction<Module1> {}
    
       public class Module2BootstrapAction<Module2> {}
    
       public class Module3BootstrapAction<Module3> {}
    

    有关MvvmCross启动的更多信息,请参阅 https://github.com/MvvmCross/MvvmCross/wiki/Customising-using-App-and-Setup

    有关MvvmCross插件的更多信息,请参阅 https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins