.NET Aspire 应用程序(net8.0、Aspire 8)已在 AppHost 中配置 SQL Server 容器。
在 Web 应用程序的
Program.cs
中,builder.AddSqlServerClient("mySqlServer")
使用依赖项注入容器注册 SqlConnection 工厂。添加 SqlConnection 后,您可以使用 DI 获取作用域 SqlConnection 实例。
我可以在同一项目中直接使用此 SqlConnection,但我使用数据存储库项目来分离关注点(不是 EF Core,而是 Dapper)。数据存储库可通过 DI 从 Web 项目获取:
builder.Services.AddScoped<IDataRepository, DataRepository>();
Web 应用程序的 DI 容器中的 SqlConnection 可以从
.AddSqlServer()
传递到作用域 IDataRepository 吗?这将如何完成?
目前在 DataRepository 实现中,我使用环境变量中的连接字符串来创建 SqlConnection 对象,但我更喜欢使用由
.AddSqlServer()
创建的 SqlConnection,因为它已由 Aspire ServiceDefaults 配置。
您可以走到应用程序的
IConfiguration
并直接请求连接字符串。例如:
public class DataRepository(IConfiguration config)
{
public async Task<T> GetAsync<T>(string id)
{
var connectionString = config.GetConnectionString("mySqlServer");
// TODO: Use the connection string here...
}
}
我对
DataRepository
类做了一些假设,但无论你在哪里调用 GetConnectionString
,想法都是一样的。