4

有问题使用来自内容提供者和活动的 MvvmCross我想知道如何初始化 MvvmCross 系统。

当时给出的答案有效,但随着最近 MvvmCross 的更新,我使用的函数 (MvxAndroidSetupSingleton.GetOrCreateSetup()) 已被弃用。

我现在已经改变了我的初始化,它似乎到目前为止工作,但它是正确和正确的吗?我应该采取不同的方式来提高可移植性吗?

安装类,在 Android 平台特定的 DLL 中:

public class Setup
   : MvxAndroidSetup
{
    public Setup(Context applicationContext)
        : base(applicationContext)
    {
    }

    protected override IMvxApplication CreateApp()
    {
        // Create logger class which can be used from now on
        var logger = new AndroidLogger();
        Mvx.RegisterSingleton(typeof(ILogger), logger);
        var app = new App();
        InitialisePlatformSpecificStuff();
        return app;
    }

    private void InitialisePlatformSpecificStuff()
    {
        // For instance register platform specific classes with IoC
    }
}

还有我在可移植核心库中的 App 类:

public class App
    : MvxApplication
{
    public App()
    {
    }

    public override void Initialize()
    {
        base.Initialize();
        AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;
        InitialisePlugins();
        InitaliseServices();
        InitialiseStartNavigation();
    }

    private void InitaliseServices()
    {
        CreatableTypes().EndingWith("Service").AsInterfaces().RegisterAsLazySingleton();
    }

    private void InitialiseStartNavigation()
    {
    }

    private void InitialisePlugins()
    {
        // initialise any plugins where are required at app startup
        // e.g. Cirrious.MvvmCross.Plugins.Visibility.PluginLoader.Instance.EnsureLoaded();
    }

    public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
    {
        // Log exception info etc
    }
4

1 回答 1

3

我使用的函数 (MvxAndroidSetupSingleton.GetOrCreateSetup()) 已被弃用。

需要对 MvvmCross 初始化进行更改以帮助用户避免“多个闪屏”问题 - 请参阅https://github.com/slodge/MvvmCross/issues/274

这些变化的核心是:

因此,您可以看到此更改删除了以下行:

-  var setup = MvxAndroidSetupSingleton.GetOrCreateSetup(activity.ApplicationContext);
-  setup.EnsureInitialized(androidView.GetType());

并将它们替换为:

+  var setupSingleton = MvxAndroidSetupSingleton.EnsureSingletonAvailable(activity.ApplicationContext);
+  setupSingleton.EnsureInitialized(); 

因此,您的更改将需要反映相同的代码。

于 2013-07-04T09:16:28.377 回答