2015-09-18 3 views
3

Я использовал NuGet менеджер пакетов для загрузки this packageНе можете найти SQLitePlatformIOS в Sqlite.net PCL

На примере показано:

public class SQLiteFactoryiOS : ISQLiteFactory 
{ 
    public SQLite.Net.SQLiteConnection CreateConnection(string dbName) 
    { 
     var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), dbName); 
     return new SQLite.Net.SQLiteConnection(new SQLitePlatformIOS(), path); 
    } 
} 

Проблема я столкнулся в том, что я не могу ссылаться на SQLitePlatformIOS. Я даже нашел его в source code, но я не могу достичь пространства имен .Platform, поэтому я не могу создать объект SQLitePlatformIOS.

using SQLite.Net; //.Platform.XamarinIOS <-- Compiler error if I try to reach this 

Проект Я использую для ссылки на это портативный проект класса, потому что в папке ссылки я вижу .NET подмножества переносимого.

Структура проекта

IOS MainProject ссылки Пример Портативное проекта Пример референции Портативный Проект SQLite.Net-PCL

В портативном проекта у меня есть

References 
    .NET Portable Subset 
    From Packages 
      SQLite.Net 
Packages 
    SQLite.Net-PCL 
Data 
    Repositories 
      ExampleRepository.cs 

Мой пример хранилищу is

using System; 
using Example.Data.DTO; 
using Example.Models.Properties; 

using SQLite.Net; 

namespace Example.Data.Repositories 
{ 
    public class ExampleRepository(string dbPath) 
    { 
     using (var db = new SQLite.Net.SQLiteConnection(new SQLitePlatformIOS() /* Can't reference */, dbPath)) 
     { 
      db.CreateTable<ExampleDTO>(); 
     } 
    } 
} 

И я называю этот класс из проекта iOS.

partial void SaveObject(NSObject sender) 
{ 
    var objectToSave = CreateObjectFromView(); 
    var dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "Test.db3"); 
    var repo = new ExampleRepository(dbPath); 
} 
+0

Можете ли вы показать свою структуру проекта? Если вы используете общий код, нет необходимости ссылаться на реализацию iOS в PCL. PCL должен знать только интерфейс.Проект iOS введет правильную реализацию –

+0

Хорошо, дайте мне несколько минут, чтобы изменить свой вопрос. – mac10688

+0

Я просто добавил ссылку SQLite.Net-PCL на мой проект iOS и теперь может ссылаться на пространство имен платформы. Hmm ... – mac10688

ответ

7

Причина вы не нашли ссылку на реализацию IOS, потому что вы не имеете доступа к платформе конкретного кода в PCL. На самом деле вам это не нужно. Все, что вам нужно в PCL, это интерфейс, конкретный код будет вводиться с использованием рамки DI, поэтому PCL использует правильный код для каждой платформы, не имея необходимости проверять, какую платформу вы используете во время выполнения.

Here вы можете увидеть пример того, как Dependency Injection работы (и он даже использует SQLite)

+0

Это правильный ответ. Что касается DI, я ищу лучший пример инъекции зависимостей в Xamarin iOS. Хотя хорошо, что бизнес-уровень использует инсталляцию конструктора, я не знаю, как я отношусь к контроллерам, ссылающимся на статический AppDelegate для объектов. Я не уверен, что Xamarin IoS может поддержать DI, который я ищу. Тот, который позволяет осуществлять чистую инсталляцию конструктора и управление жизненным циклом объекта с помощью контейнера IoC. – mac10688

2

Да, пространство имен .Platform исчез из пакета SQLite.Net PCL.

Обходной путь заключается в том, чтобы загрузить исходный код с https://github.com/oysteinkrog/SQLite.Net-PCL, а затем самостоятельно создать двоичные файлы. Для этого откройте решение в Xamarin Studio (набрав его на 5.10.3 Build 51), измените режим на Release (без таргетинга на какое-либо конкретное оборудование) и нажмите Build -> Build All.

Затем откройте свой проект IOS в Xamarin Studio, щелкните правой кнопкой мыши на ссылках папку и выберите Edit References..., а затем нажмите на вкладку .Net Assembly, нажмите Browse... и перейдите к месту нахождения SQLite.Net.Platform.XamarinIOS.Unified. dll, который вы только что создали. Это должно быть в SQLite.Net-PCL-master/SQLite.Net.Platform.XamarinIOS.Unified/bin/Release

Хотя старый пост с 2014 года, я нашел ссылку SQLite.Net PCL GitHub от https://forums.xamarin.com/discussion/28916/error-while-trying-to-install-sqlite-net-platform-xamarinios-2-4-1-please-help (См JuhaPehkonen в декабре 2014 пост)

И немного подробнее о добавлении ссылки в Xamarin студии может можно найти здесь: How to add libraries to Xamarin References lists

Смежные вопросы