我试图用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);
}
}