注入两个SQLite数据库并使用它们的存储库C#

时间:2018-01-04 09:27:04

标签: c# sqlite xamarin xamarin.forms

我有一个Xamarin Forms项目,我需要有两个SQLite Connection。我正在使用Autofac 3.5.2

我有一个全球IRepository<TEntity>

public interface IRepository<TEntity>
        where TEntity : class, new()
    {
        Task<int> AddAsync(TEntity entity);
        Task<int> DeleteAsync(TEntity entity);
    }

我决定创建一个抽象类来管理IRepository<TEntity>接口:

public abstract class BaseRepository <TEntity> : IRepository<TEntity>
        where TEntity : class, new()
    {
        private SQLiteAsyncConnection Connection { get; }

        public BaseRepository(SQLiteAsyncConnection connection)
        {
            Connection = connection;
        }

        public async Task<int> AddAsync(TEntity entity)
        {
            return await Connection.InsertAsync(entity);
        }

        public async Task<int> DeleteAsync(TEntity entity)
        {
            return await Connection.DeleteAsync(entity);
        }
}

之后我不想实例化我的两个SQLiteConnections:

第一个:

public class SQLiteRepositoryFirst<TEntity> : BaseRepository<TEntity>
        where TEntity : class, new()
    {
        public SQLiteRepositoryFirst(SQLiteAsyncConnection connection) : base(connection)
        {

        }
    }

第二个:

public class SQLiteRepositorySecond<TEntity> : BaseRepository<TEntity>
        where TEntity : class, new()
    {
        public SQLiteRepositorySecond(SQLiteAsyncConnection connection) : base(connection)
        {

        }
    }

使用Autofac我这样注入:

builder.RegisterGeneric(typeof(BaseRepository<>))
                   .As(typeof(IRepository<>))
                   .SingleInstance();

builder.RegisterType<DatabaseConfiguration>()
                   .As<IDatabaseConfiguration>()
                   .SingleInstance();

            builder.Register(connect => new SQLiteAsyncConnection(
                connect.Resolve<IDatabaseConfiguration>().GetFirstConnectionPath()))
                   .As<SQLiteAsyncConnection>().SingleInstance();

            builder.Register(connect => new SQLiteAsyncConnection(
                connect.Resolve<IDatabaseConfiguration>(). GetSecondConnectionPath()))
                  .As<SQLiteAsyncConnection>().SingleInstance();

DatabaseConfiguration类是我获取两个字符串路径数据库的路径的地方。

现在我不想像这样使用我的存储库:

 IRepository<HouseEntity> HouseRepository { get; }

但它没有用,问题是当我使用存储库时,我不知道如何区分两个数据库连接。因此应用程序不知道我需要在哪个数据库中获取数据。

编辑: 看起来我也有抽象类注入的问题。

也许我做错了?

0 个答案:

没有答案