У меня есть слой данных, который использует Sqlite для работы CRUD, поэтому в моем Sqlite Class я должен передать путь к БД, для этого у меня есть интерфейс 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, но я не думаю, что это будет хорошей идеей, поскольку создаст больше зависимостей.