我正在尝试在我的一个应用程序中使用 MvvmCross v3,它由活动、内容提供者和广播接收器组成。然而,我并不十分成功。
该应用程序由一个包含逻辑、模型和视图模型的核心 PCL 和一个包含所有 MonoDroid 特定内容的 Droid 应用程序组成。
在核心中我有一个 App:MvxApplication 类,在 Droid 中我有一个 Setup:MvxSetup 类,它创建一个应用程序实例并初始化东西。
我可以毫无问题地将 IOC 部分与内容提供者、广播接收器和非 Mvx 活动一起使用。当我现在想添加一个 MvxActivity 时,它会分崩离析。
当 Mvx Activity 启动时,我得到一个异常“ 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);
}
}