4

我正在尝试在我的一个应用程序中使用 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);
    }
}
4

1 回答 1

3

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

我怀疑你可以通过单例类创建你的设置,但如果这对你的需要不够灵活,那么请在 github 上记录一个问题

也很想看到一些关于这个的博客——我没有太多使用自定义内容提供程序(根本!)

于 2013-04-07T14:09:36.040 回答