2016-08-15 1 views
0

Я использую SQLite для через интерфейс ISQLite который осуществляется по стандартному пути через [сборка: Dependency (TypeOf (SQLite_iOS))] ...Prism Xamarin 6,2 IDependencyService в службе

, но я стараюсь для реализации модели доступа к данным через Repository шаблон

Мой класс BaseRepository выглядит следующим образом

public abstract class BaseRepository<TEntity, TKey> : IRepository<TEntity, TKey> where TEntity : class, new() 
{ 
    private readonly SQLiteAsyncConnection _connection; 

    protected BaseRepository(ISQLite sqlite) 
    { 
     _connection = sqlite.GetAsyncConnection(); 

     _connection.CreateTableAsync<TEntity>().Wait(); 
    } 

для каждой модели у меня есть реализация класса BaseRepository

public class SectorsRepository : BaseRepository<Sectors, int>, ISectorsRepository 
{ 
    public SectorsRepository(ISQLite context) 
     : base(context) 
    { 

    } 
} 

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

protected override void RegisterTypes() 
    { 

     Container.RegisterType<ISectorsRepository, SectorsRepository>(new InjectionConstructor(dependencyService.Get<ISQLite>())); 
} 

Есть идеи?

спасибо

ответ

1

Вы не должны использовать DependencyService вообще. Это не нужно. У вас уже есть настоящий контейнер DI. Используйте это вместо этого. Даже если вы используете атрибут DependencyService в ваших проектах платформы, вам не нужно их разрешать, вызывая DependencyService. Призма автоматически разрешит их для вас. Вы также не должны вручную вводить что-либо в свой ctor, потому что ваш контейнер будет делать это автоматически, пока вы зарегистрировали свои услуги в контейнере.

+0

Спасибо! Не знал, что призма автоматически разрешает их. В конце мой код преобразован в: Container.RegisterType (); – James

0

Чтобы ответить самому себе. Этот кусок кода заставил его работать. Единственное, что мне не нравится, это ручное создание DependencyService. Кто-нибудь имеет более элегантное решение?

благодаря

protected override void RegisterTypes() 
     { 
      DependencyService ds = new DependencyService(); 
      Container.RegisterType<IUnitOfWork, UnitOfWork>(new InjectionConstructor(ds.Get<ISQLite>())); 
.... 
} 
Смежные вопросы