MvvmCross 不能在所有平台上进行真正的动态加载 - 因为 Xamarin.iOS 平台不允许这样做(并且 Android 平台也使其变得困难 - 例如,请参阅Dynamicly resolve 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
目前这MvxBootstrapRunner
只是真正用于插件,我怀疑如果你愿意,你可以将你的模块基于这个插件框架。
或者,引导运行程序的设计意图是它可以轻松适应任何启动操作 - 因此您应该能够使用以下模板构建自己的基于引导的类:
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