如何在MVVMCross中覆盖插件注册

时间:2013-11-12 20:52:04

标签: wpf sqlite mvvmcross

我在MVVMCross中使用WPF Sqlite插件,但我想覆盖数据库写入的目录。我编写了一个自定义ISQLiteConnectionFactory,它目前驻留在我的WPF引导程序项目中:

internal class CustomMvxWpfSqLiteConnectionFactory : ISQLiteConnectionFactory
{
    const string DirectoryName = "ProductName";

    public ISQLiteConnection Create(string address)
    {
        var appData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        var dir = Path.Combine(appData, DirectoryName);
        Directory.CreateDirectory(dir);

        var path = Path.Combine(dir, address);
        return new SQLiteConnection(path, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create, false);
    }
}

我无法弄清楚如何覆盖Mvx.RegisterSingleton<ISQLiteConnectionFactory>(new MvxWpfSqLiteConnectionFactory());所做的Cirrious.MvvmCross.Plugins.Sqlite.Wpf.Plugin

我的PCL项目App在Initialize期间注册了一个依赖于ISQLiteConnectionFactory的单件服务,因此我显然希望在此之前覆盖IOC注册。但无论我做什么,插件注册MvxWpfSqLiteConnectionFactory而不是我自己注册CustomMvxWpfSqLiteConnectionFactory似乎优先。

我已经尝试将我的注册调用放在我的WPF Setup.cs中的各种覆盖中,但到目前为止还没有任何工作。

1 个答案:

答案 0 :(得分:1)

有关如何加载插件的文章包含在https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins#how-plugins-are-loaded

默认情况下,Sqlite插件在安装程序的PerformBootstrapActions期间初始化 - 请参阅https://github.com/MvvmCross/MvvmCross/wiki/Customising-using-App-and-Setup#setupcs,了解启动顺序中的位置。

从您的问题来看,目前尚不清楚您尝试过的设置中有哪些覆盖 - 我不确定“各种”包括哪些位置。但是,听起来想要在ISQLiteConnectionFactory之后和PerformBootstrapActions之前的任何时候注册InitializeApp - 所以一种方法是覆盖InitializeApp

protected virtual void InitializeApp(IMvxPluginManager pluginManager)
{
    // your code here
     base.InitializeApp(pluginManager);
}

要考虑的其他一些想法: