从内容提供商和活动使用MvvmCross(Using MvvmCross from content

2019-08-20 03:56发布

我试图用MvvmCross V3在我的应用程序之一,下设活动,内容提供商和广播接收机。 不过,我不是很成功。

该应用程序包含一个核心PCL包含逻辑,模型和的ViewModels和其中包含的所有特定MonoDroid的-东西一个机器人的应用程序。

在核心我有一个应用程序:MvxApplication类和Droid的我有一个设置:MvxSetup类,它创建了一个应用实例和初始化的东西。

我可以使用与内容提供商,广播接收机和非MVX活动的国际奥委会部分没有问题。 当我现在想添加一个MvxActivity它分崩离析。

当MVX活动启动我得到一个异常“Cirrious.CrossCore.Exceptions.MvxException:MvxTrace已经初始化”。

显然,我在错误的顺序/错了地方初始化的事情。 但是,我需要在正确的方向指针。

我的应用类

public class App
    : MvxApplication
{
    public override void Initialize()
    {
        base.Initialize();
        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 class Setup
    : MvxAndroidSetup
{
    public Setup(Context applicationContext)
        : base(applicationContext)
    {
    }

    protected override IMvxApplication CreateApp()
    {
        return new App();
    }

    protected override IMvxNavigationSerializer CreateNavigationSerializer()
    {
        return new MvxJsonNavigationSerializer();
    }

    public override void LoadPlugins(Cirrious.CrossCore.Plugins.IMvxPluginManager pluginManager)
    {
        pluginManager.EnsurePluginLoaded<Cirrious.MvvmCross.Plugins.Json.PluginLoader>();
        base.LoadPlugins(pluginManager);
    }

    public void RegisterServices()
    {
        // I register a bunch of singletons here
    }

    // The following is called from my content provider's OnCreate()
    // Which is the first code that is run
    public static void DoSetup(Context applicationContext)
    {
        var setup = new Setup(applicationContext);
        setup.Initialize();
        setup.RegisterServices();
    }

我的内容提供商的OnCreate():

    public override bool OnCreate()
    {
        Log.Debug(Tag, "OnCreate");
        _context = Context;
        Setup.DoSetup(_context);
        return true;
    }

我MvxActivity:

[Activity(Label = "@string/ApplicationName", MainLauncher = true)]
[IntentFilter(new[] { "Settings" })]
public class SettingsView 
    : MvxActivity
{
    public new SettingsViewModel ViewModel
    {
        get { return (SettingsViewModel) base.ViewModel; }
        set { base.ViewModel = value; }
    }

    protected override void OnViewModelSet()
    {
        SetContentView(Resource.Layout.Page_SettingsView);
    }
}

Answer 1:

简答题(我在移动机场)

  • 所有MVX的Android意见将检查设置单已创建- https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Droid/Platform/MvxAndroidSetupSingleton.cs (vnext树-但类似上V3)

  • 所以,如果你正在创建一个安装程序,但没有设置这个单身,那么你会得到创建了第二个设置当你第一次显示视图

我怀疑你可以得到你的设置通过单个类创建的,但如果这是不是你需要足够的灵活性,那么请登录GitHub上的问题

也希望能看到一些博客这一点 - 我没有用自定义的内容提供商多(在所有!)



文章来源: Using MvvmCross from content providers and activities
标签: mvvmcross