diff --git a/src/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite/AspireEFSqliteExtensions.cs b/src/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite/AspireEFSqliteExtensions.cs index 52bd18e8f..daff5560b 100644 --- a/src/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite/AspireEFSqliteExtensions.cs +++ b/src/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite/AspireEFSqliteExtensions.cs @@ -71,13 +71,13 @@ void ConfigureDbContext(DbContextOptionsBuilder dbContextOptionsBuilder) } /// - /// Enriches a to register the as a scoped service - /// with simplified configuration and optional OpenTelemetry instrumentation. + /// Configures retries, health check, logging and telemetry for the . /// /// The type of the . /// The to read config from and add services to. /// An optional delegate that can be used for customizing options. It's invoked after the settings are read from the configuration. /// Thrown if mandatory is null. + /// Thrown when mandatory is not registered in DI. public static void EnrichSqliteDatabaseDbContext<[DynamicallyAccessedMembers(RequiredByEF)] TDbContext>( this IHostApplicationBuilder builder, Action? configureSettings = null) @@ -93,8 +93,8 @@ void ConfigureDbContext(DbContextOptionsBuilder dbContextOptionsBuilder) configureSettings?.Invoke(settings); - builder.Services.AddDbContext(options => - options.UseSqlite(settings.ConnectionString)); + builder.CheckDbContextRegistered(); + ConfigureInstrumentation(builder, settings); } diff --git a/tests/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite.Tests/EnrichSqliteDatabaseDbContextTests.cs b/tests/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite.Tests/EnrichSqliteDatabaseDbContextTests.cs index 29d6ea46f..e7737fd29 100644 --- a/tests/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite.Tests/EnrichSqliteDatabaseDbContextTests.cs +++ b/tests/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite.Tests/EnrichSqliteDatabaseDbContextTests.cs @@ -1,7 +1,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Hosting; namespace CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite.Tests; @@ -9,13 +8,12 @@ namespace CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite.Tests; public class EnrichSqliteDatabaseDbContextTests { [Fact] - public void EnrichSqliteDatabaseDbContext_RegistersDbContext() + public void EnrichSqliteDatabaseDbContext_UsesAlreadyRegisteredDbContext() { // Arrange var builder = WebApplication.CreateBuilder(); - builder.Configuration.AddInMemoryCollection([ - new KeyValuePair("ConnectionStrings:DefaultConnection", "Data Source=:memory:") - ]); + builder.Services.AddDbContext(options => + options.UseSqlite("Data Source=:memory:")); // Act builder.EnrichSqliteDatabaseDbContext(); @@ -26,6 +24,17 @@ public void EnrichSqliteDatabaseDbContext_RegistersDbContext() Assert.NotNull(dbContext); } + [Fact] + public void EnrichSqliteDatabaseDbContext_ThrowsWhenDbContextIsNotRegistered() + { + // Arrange + var builder = WebApplication.CreateBuilder(); + + // Act & Assert + Assert.Throws(() => + builder.EnrichSqliteDatabaseDbContext()); + } + [Fact] public void EnrichSqliteDatabaseDbContext_ThrowsWhenBuilderIsNull() { @@ -35,13 +44,12 @@ public void EnrichSqliteDatabaseDbContext_ThrowsWhenBuilderIsNull() } [Fact] - public void EnrichSqliteDatabaseDbContext_DisablesOpenTelemetryWhenFalse() + public void EnrichSqliteDatabaseDbContext_DisablesOpenTelemetryWhenConfigured() { // Arrange var builder = WebApplication.CreateBuilder(); - builder.Configuration.AddInMemoryCollection([ - new KeyValuePair("ConnectionStrings:DefaultConnection", "Data Source=:memory:") - ]); + builder.Services.AddDbContextPool(options => + options.UseSqlite("Data Source=:memory:")); // Act builder.EnrichSqliteDatabaseDbContext(settings => settings.DisableTracing = true); @@ -57,9 +65,8 @@ public void EnrichSqliteDatabaseDbContext_EnablesOpenTelemetryByDefault() { // Arrange var builder = WebApplication.CreateBuilder(); - builder.Configuration.AddInMemoryCollection([ - new KeyValuePair("ConnectionStrings:DefaultConnection", "Data Source=:memory:") - ]); + builder.Services.AddDbContext(options => + options.UseSqlite("Data Source=:memory:")); // Act builder.EnrichSqliteDatabaseDbContext(settings => settings.DisableTracing = false); @@ -70,7 +77,7 @@ public void EnrichSqliteDatabaseDbContext_EnablesOpenTelemetryByDefault() Assert.NotNull(dbContext); // Verify OpenTelemetry services are registered (basic smoke test) - var services = app.Services.GetServices().ToList(); - Assert.True(services.Count > 0, "Services should be registered"); + var healthCheckService = app.Services.GetService(); + Assert.NotNull(healthCheckService); } } \ No newline at end of file