使用C#的异步和依赖注入实现网络数据存储

时间:2025-04-10 14:59:17
  • using ; // 引入依赖注入的命名空间
  • using ; // 引入 JSON 处理的命名空间
  • using System; // 引入基本的系统功能
  • using ; // 引入泛型集合功能
  • using ; // 引入 SQLite 数据库操作的命名空间
  • using ; // 引入文件操作的命名空间
  • using ; // 引入 HTTP 网络请求的命名空间
  • using ; // 引入异步编程的命名空间
  • namespace ComplexConsoleApp
  • {
  • class Program
  • {
  • static async Task Main(string[] args)
  • {
  • // 配置服务
  • var services = new ServiceCollection();
  • ConfigureServices(services);
  • var serviceProvider = ();
  • // 获取 IDataProcessor 实现类的实例并处理数据
  • var dataProcessor = <IDataProcessor>();
  • await ();
  • }
  • private static void ConfigureServices(IServiceCollection services)
  • {
  • // 将 DataProcessor 注册为 IDataProcessor 的实现
  • <IDataProcessor, DataProcessor>();
  • // 将 DbConnectionFactory 注册为 IDbConnectionFactory 的实现
  • <IDbConnectionFactory, DbConnectionFactory>();
  • }
  • }
  • // 数据处理接口
  • public interface IDataProcessor
  • {
  • Task ProcessDataAsync(); // 异步处理数据
  • }
  • public class DataProcessor : IDataProcessor
  • {
  • private readonly IDbConnectionFactory _dbConnectionFactory;
  • private const string ApiUrl = "/data"; // API 数据的 URL
  • public DataProcessor(IDbConnectionFactory dbConnectionFactory)
  • {
  • _dbConnectionFactory = dbConnectionFactory;
  • }
  • public async Task ProcessDataAsync()
  • {
  • try
  • {
  • // 获取数据
  • var data = await FetchDataAsync();
  • // 处理数据
  • var processedData = ProcessData(data);
  • // 将数据保存到数据库
  • await SaveDataToDatabaseAsync(processedData);
  • // 将数据写入文件
  • WriteDataToFile(processedData);
  • }
  • catch (Exception ex)
  • {
  • // 捕捉并输出异常信息
  • ($"发生错误: {}");
  • }
  • }
  • private async Task<List<DataItem>> FetchDataAsync()
  • {
  • using (var client = new HttpClient())
  • {
  • // 发送 HTTP GET 请求并获取响应内容
  • var response = await (ApiUrl);
  • // 将 JSON 响应内容转换为 DataItem 对象的列表
  • return <List<DataItem>>(response);
  • }
  • }
  • private List<ProcessedDataItem> ProcessData(List<DataItem> data)
  • {
  • // 模拟数据处理
  • var processedData = new List<ProcessedDataItem>();
  • foreach (var item in data)
  • {
  • // 将每个数据项的名称转换为大写,并计算值的长度
  • (new ProcessedDataItem
  • {
  • Id = ,
  • Name = (),
  • Value =
  • });
  • }
  • return processedData;
  • }
  • private async Task SaveDataToDatabaseAsync(List<ProcessedDataItem> data)
  • {
  • using (var connection = _dbConnectionFactory.CreateConnection())
  • {
  • await (); // 打开数据库连接
  • var transaction = (); // 开始事务
  • foreach (var item in data)
  • {
  • // 创建 SQL 命令
  • var command = ();
  • = transaction;
  • = "INSERT INTO ProcessedData (Id, Name, Value) VALUES (@Id, @Name, @Value)";
  • ("@Id", );
  • ("@Name", );
  • ("@Value", );
  • await (); // 执行 SQL 命令
  • }
  • (); // 提交事务
  • }
  • }
  • private void WriteDataToFile(List<ProcessedDataItem> data)
  • {
  • using (var writer = new StreamWriter(""))
  • {
  • foreach (var item in data)
  • {
  • // 将处理后的数据写入文件
  • ($"{}, {}, {}");
  • }
  • }
  • }
  • }
  • // 数据库连接工厂接口
  • public interface IDbConnectionFactory
  • {
  • SQLiteConnection CreateConnection(); // 创建 SQLite 连接
  • }
  • public class DbConnectionFactory : IDbConnectionFactory
  • {
  • private const string ConnectionString = "Data Source=;Version=3;"; // 数据库连接字符串
  • public SQLiteConnection CreateConnection()
  • {
  • return new SQLiteConnection(ConnectionString); // 创建并返回 SQLite 连接
  • }
  • }
  • // 从 API 获取的原始数据项
  • public class DataItem
  • {
  • public int Id { get; set; } // 数据项的 ID
  • public string Name { get; set; } // 数据项的名称
  • public string Value { get; set; } // 数据项的值
  • }
  • // 处理后的数据项
  • public class ProcessedDataItem
  • {
  • public int Id { get; set; } // 数据项的 ID
  • public string Name { get; set; } // 数据项的名称(转换为大写)
  • public int Value { get; set; } // 数据项的值的长度
  • }
  • }
  • 相关文章