gpt4 book ai didi

mvvmcross - 使用来自内容提供者和事件的 MvvmCross

转载 作者:行者123 更新时间:2023-12-01 02:26:34 26 4
gpt4 key购买 nike

我正在尝试在我的应用程序之一中使用 MvvmCross v3,该应用程序由事件、内容提供者和广播接收器组成。但是,我并没有完全成功。

该应用程序由一个包含逻辑、模型和 View 模型的核心 PCL 和一个包含所有 MonoDroid 特定内容的 Droid 应用程序组成。

在 Core 中,我有一个 App:MvxApplication 类,而在 Droid 中,我有一个 Setup:MvxSetup 类,它创建一个应用程序实例并初始化东西。

我可以毫无问题地将 IOC 部分与内容提供者、广播接收器和非 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);
}
}

最佳答案

简短回答(我在手机上的机场)

  • 所有 mvx android View 都将检查已创建的设置单例 - https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Droid/Platform/MvxAndroidSetupSingleton.cs (vnext 树 - 但在 v3 上类似)
  • 所以如果你正在创建一个设置,但没有设置这个单例,那么你将在第一次显示 View 时创建第二个设置

  • 我怀疑您可以通过单例类创建您的设置,但是如果这不足以满足您的需求,那么请在 github 上记录一个问题

    也很想看到一些关于这个的博客 - 我很少使用自定义内容提供者(根本没有!)

    关于mvvmcross - 使用来自内容提供者和事件的 MvvmCross,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15862980/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com