【发布时间】:2018-05-29 05:52:05
【问题描述】:
我有一个使用 Sqlite 进行 CRUD 操作的数据层,所以在我的 Sqlite 类中我必须传递数据库的路径,为此我在数据层中有接口 IConnectionProvider,如下所示:
public interface IConnectionProvider
{
string DbPath { get; }
}
SqliteDb.cs
public class SQLiteDb : DbContext, IDbContext
{
internal const string DefaultDatabaseName = "My.db";
private string connectionString = null;
public SQLiteDb(IConnectionProvider connectionProvider)
{
this.connectionString = connectionProvider.DbPath;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite(connectionString);
}
}
我的项目架构如下:
Data Layer -> View Model -> Presentation Layer
我想避免直接在表示层中使用数据层,但是要传递 DBPath 我必须添加它的引用。
下面是IConnectionProvider在我的表现层中的实现:
public class SqlConnectionProvider : IConnectionProvider
{
public string dbPath = string.Empty;
public string DbPath
{
get
{
if (string.IsNullOrEmpty(dbPath))
{
dbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "MyDb.sqlite");
}
return dbPath;
}
}
}
有什么方法可以避免将 DataLayer 直接用于表示层?我想在 VM 中创建包装器,但我认为这不是一个好主意,因为它会创建更多的依赖项。
【问题讨论】:
-
确定,注入并编程到数据层接口?除了简单地说“不要做你正在做的事”之外,你还不清楚你在问什么。
标签: c# design-patterns ninject