我有一个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; }
但它没有用,问题是当我使用存储库时,我不知道如何区分两个数据库连接。因此应用程序不知道我需要在哪个数据库中获取数据。
编辑: 看起来我也有抽象类注入的问题。
也许我做错了?