2013-11-12 8 views
0

Я использую плагин WPF Sqlite в MVVMCross, но я хочу переопределить каталог, в который записана база данных. Я написал пользовательский ISQLiteConnectionFactory, который в настоящее время проживает в моем проекте WPF загрузчика:Как переопределить регистрацию плагина в MVVMCross

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 регистрирует однопользовательский сервис, который зависит от ISQLiteConnectionFactory во время инициализации, поэтому я, очевидно, хочу переопределить регистрацию МОК до этого. Но независимо от того, что я делаю, регистрация плагина MvxWpfSqLiteConnectionFactory, а не моя собственная регистрация CustomMvxWpfSqLiteConnectionFactory, кажется, имеет приоритет.

Я пробовал поместить свой регистрационный вызов во всевозможные переопределения в моем WPF Setup.cs, но до сих пор ничего не работало.

ответ

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); 
} 

Некоторые другие возможные идеи для рассмотрения:

  • , если вы хотите, чтобы плагин Sqlite не был инициализирован в случае Wpf, вы можете удалить файл начальной загрузки Sqlite из вашего проекта Wpf (но остерегайтесь того, что nuget может попытаться добавить его позже)
  • новое «сообщество» для к»проекту SQLite MvvmCross имеет исходный код обновлен до последней SQLite внутрисетевых версий (через @jarroda) и имеет BasePathCreateEx опции, чтобы разрешить папку для указания - см https://github.com/MvvmCross/MvvmCross-SQLite/blob/master/Sqlite/Cirrious.MvvmCross.Community.Plugins.Sqlite.Wpf/MvxWpfSqLiteConnectionFactory.cs#L24
Смежные вопросы