2013-07-04 3 views
4

В вопросе Using MvvmCross from content providers and activities Я хотел знать, как инициализировать систему MvvmCross.Инициализация MvvmCross

Ответ дан сработанным тогда, но с недавними обновлениями MvvmCross функция, которую я использовал (MvxAndroidSetupSingleton.GetOrCreateSetup()), устарела.

Я изменил свою инициализацию и, похоже, работает до сих пор, но верно ли это правильно? Должен ли я делать что-то по-другому, чтобы улучшить переносимость?

класс установки в платформе конкретной DLL для Android:

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 
    } 

ответ

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(); 

Итак, ваши изменения должны будут отражать этот же код.

+0

Ooops. Я забыл включить мой код настройки, используемый в OnCreate ... Это было точно так, как вы показали. –

Смежные вопросы