使用依赖注入选择多个数据库时,可以分离数据库选择逻辑,实现模块化开发。引入依赖注入可以让您轻松地在不同的数据库实现之间切换,而无需更改其他代码。这种灵活性不仅使您的应用程序更具可扩展性,而且还使您的代码更易于维护和测试。这样就可以将数据库选择逻辑与业务逻辑分离,使代码结构更加清晰,更易于理解和维护。
下面是一个简单的结构
我有两个数据库:SqlServer 和Sqlite。数据库表的结构是相同的。
实体类
公开课数据
{
公共字符串ID { 设置;
公共字符串名称{集合;
}
界面
通用公共接口
{
无效连接();
列表数据SeletAll();
ListDatas SeletOne(string Was);
int删除(字符串ID);
}
SQLite接口实现类
公共类AsSqlite
{
公共静态SqlSugarClient客户端;
公共类SqlitebaseData : 一般
{
公共无效连接()
{
客户端=新的SqlSugarClient(新的ConnectionConfig()
{
ConnectionString=\’数据源=TEe.db;\’,
DbType=SqlSugar.DbType.Sqlite,
IsAutoCloseConnection=true
});
}
公共int 删除(字符串ID)
{
var dbs=Client.DeleteableDatas(new Datas() { ID=ID}).ExecuteCommand();
返回数据库。
}
公共列表数据SelectAll()
{
返回Client.QueryableDatas().ToList()。
}
公共ListDatas SeletOne(字符串Was)
{
var data=Client.QueryableDatas().Where(it=it.ID==Was).ToList();
返回数据。
}
}
}
SQLserver接口实现类
公共类AsSqlserver
{
公共静态SqlSugarClient数据库;
公共类SqlServerDatabase : 常规
{
公共无效连接()
{
db=new SqlSugarClient(new ConnectionConfig()
{
ConnectionString=\’服务器=.uid=sa;pwd=123456;数据库=Sqler\’,
DbType=SqlSugar.DbType.SqlServer,
IsAutoCloseConnection=true
});
}
公共int 删除(字符串ID)
{
var dbs=db.DeleteableDatas(new Datas() { ID=ID }).ExecuteCommand();
返回数据库。
}
公共列表数据SelectAll()
{
返回db.QueryableDatas().ToList()。
}
公共ListDatas SeletOne(字符串Was)
{
var data=db.QueryableDatas().Where(it=it.ID==Was).ToList();
返回数据。
}
}
}
数据库工厂类
SqliteDatabaseFactory 类的构造函数采用General 类型的参数并将其存储在私有变量_general 中。此General 对象在Connect() 和All() 方法中使用来执行某些操作。
接受General 对象作为构造函数参数实现了依赖项注入的核心概念:将依赖对象传递到类中,而不是在类中创建依赖对象。这种设计使SqliteDatabaseFactory 类更加灵活和可测试,因为您可以轻松替换传递给构造函数的General 对象,而无需更改类的代码。
SqlServerDatabaseFactory 也是如此。
公共类SqliteDatabaseFactory
{
公共只读一般_general;
public SqliteDatabaseFactory(通用数据)
{
_一般=数据;
}
公共无效连接()
{
_general.Connect();
}
公共列表数据全部()
{
返回_general.SeletAll();
}
}
公共类SqlServerDatabaseFactory
{
私有只读general_database;
public SqlServerDatabaseFactory(通用数据库)
{
_数据库=数据库;
}
公共无效连接()
{
_database.Connect();
}
公共列表数据全部()
{
返回_database.SeletAll();
}
}
XAML页面
窗户
x:Class=\’WpfApp2.MainWindow\’
xmlns=\’http://schemas.microsoft.com/winfx/2006/xaml/presentation\’
xmlns:x=\’http://schemas.microsoft.com/winfx/2006/xaml\’
xmlns:d=\’http://schemas.microsoft.com/expression/blend/2008\’
xmlns:local=\’clr-namespace:WpfApp2\’
xmlns:materialDesign=\’http://materialdesigninxaml.net/winfx/xaml/subject\’
xmlns:mc=\’http://schemas.openxmlformats.org/markup-compatibility/2006\’
title=\’主窗口\’
宽度=\’800\’
高度=\’450\’
WindowStartupLocation=\’CenterScreen\’
mc:Ignorable=\’d\’
网格
选项卡控件
MaterialDesign:ColorZoneAssist.Background=\’SteelBlue\’
materialDesign:ColorZoneAssist.Foreground=\’白色\’
materialDesign:ColorZoneAssist.Mode=\’自定义\’
materialDesign:ElevationAssist.Elevation=\’Dp6\’
TabItem header=\’Sqlser\’
组框
边距=\’16\’
MaterialDesign:ColorZoneAssist.Background=\’SteelBlue\’
materialDesign:ColorZoneAssist.Foreground=\’白色\’
materialDesign:ColorZoneAssist.Mode=\’自定义\’
背景=\’白色\’
边框厚度=\’0\’
标头=\’数据\’
样式=\'{StaticResource MaterialDesignGroupBox}\’
GroupBox.HeaderTemplate
数据模板
StackPanel 方向=\’水平\’
材料设计: 包图标
宽度=\’32\’
高度=\’32\’
垂直对齐=\’居中\’
类型=\’眼镜\’/
文本块
边距=\’8,0,0,0\’
垂直对齐=\’居中\’
样式=\'{StaticResource MaterialDesignSubtitle1TextBlock}\’
文本=\'{绑定}\’/
/堆栈面板
/数据模板
/GroupBox.HeaderTemplate
堆栈面板
按钮
宽度=\’100\’
高度=\’50\’
背景=\’钢蓝色\’
command=\'{绑定服务器命令}\’
内容=\’查询\’
前景=\’白色\’/
数据网格
x:Name=\’数据网格\’
自动生成列=\’假\’
CanUserAddRows=\’假\’
CanUserDeleteRows=\’False\’
ItemsSource=\'{绑定SQLserverdatas}\’
DataGrid.列
数据网格文本列
宽度=\’自动\’
绑定=\'{绑定ID}\’
header=\’序列号\’/
数据网格文本列
宽度=\’自动\’
绑定=\'{绑定名称}\’
标题=\’名称\’/
/DataGrid.列
/数据网格
/堆栈面板
/组框
/选项卡项目
TabItem header=\’Sqllite\’
组框
边距=\’16\’
MaterialDesign:ColorZoneAssist.Background=\’SteelBlue\’
materialDesign:ColorZoneAssist.Foreground=\’白色\’
materialDesign:ColorZoneAssist.Mode=\’自定义\’
背景=\’白色\’
边框厚度=\’0\’
标头=\’数据\’
样式=\'{StaticResource MaterialDesignGroupBox}\’
GroupBox.HeaderTemplate
数据模板
StackPanel 方向=\’水平\’
材料设计: 包图标
宽度=\’32\’
高度=\’32\’
垂直对齐=\’居中\’
类型=\’眼镜\’/
文本块
边距=\’8,0,0,0\’
垂直对齐=\’居中\’
样式=\'{StaticResource MaterialDesignSubtitle1TextBlock}\’
文本=\'{绑定}\’/
/堆栈面板
/数据模板
/GroupBox.HeaderTemplate
堆栈面板
按钮
宽度=\’100\’
高度=\’50\’
背景=\’钢蓝色\’
命令=\'{绑定SqliteCommand}\’
内容=\’查询\’
前景=\’白色\’/
数据网格
x:Name=\’数据网格\’
自动生成列=\’假\’
CanUserAddRows=\’假\’
CanUserDeleteRows=\’False\’
ItemsSource=\'{绑定Sqlitedatas}\’
DataGrid.列
数据网格文本列
宽度=\’自动\’
绑定=\'{绑定ID}\’
header=\’序列号\’/
数据网格文本列
宽度=\’自动\’
绑定=\'{绑定名称}\’
标题=\’名称\’/
/DataGrid.列
/数据网格
/堆栈面板
/组框
/选项卡项目
/选项卡控制
/网格
/窗户
查看模型
数据采集的具体实现方法如下。
公共分部类MainViewModel : ObservableObject
{
[可观察属性]
公共ObservableCollectionDatas sqlserverdatas=new ObservableCollectionDatas();
[可观察属性]
公共ObservableCollectionDatas sqlitedatas=new ObservableCollectionDatas();
公共MainViewModel()
{
}
[继电器指令]
公共任务服务器()
{
返回任务.运行(()=
{
常规常规=new SqlServerDatabase();
SqlServerDatabaseFactory Mes=new SqlServerDatabaseFactory(通用);
连接();
var data=Mes.All();
Application.Current.Dispatcher.Invoke((Action)delegate ()
{
foreach(数据中的变量项)
{
if (sqlserverdatas.FirstOrDefault(x=x.ID==item.ID)==null)
{
sqlserverdatas.Add(项目);
}
}
});
});
}
[继电器指令]
公共任务Sqlite()
{
返回任务.运行(()=
{
常规常规=new SqlitebaseData();
SqliteDatabaseFactory Mes=new SqliteDatabaseFactory(一般);
连接();
var data=Mes.All();
Application.Current.Dispatcher.Invoke((Action)delegate ()
{
foreach(数据中的变量项)
{
if (sqlitedatas.FirstOrDefault(x=x.ID==item.ID)==null)
{
sqlitedatas.Add(项目);
}
}
});
});
}
}
以上关于使用#wpf查询多个数据库并通过依赖注入在页面上显示相关内容的信息仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92125.html