Skip to content

Commit 70a48c1

Browse files
authored
Merge pull request #106 from koenbeuk/issue105
[WIP] Issue105
2 parents bfa1085 + ca02164 commit 70a48c1

3 files changed

Lines changed: 38 additions & 7 deletions

File tree

samples/v2/4 - BlazorTests/Startup.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public void ConfigureServices(IServiceCollection services)
3131
services.AddRazorPages();
3232
services.AddServerSideBlazor();
3333
services.AddSingleton<EventAggregator>();
34-
35-
services.AddDbContextFactory<ApplicationDbContext>(options => {
34+
35+
services.AddTriggeredDbContextFactory<ApplicationDbContext>(options => {
3636
options
3737
.UseSqlite("Data source=test.db")
3838
.UseTriggers(triggerOptions => {

src/EntityFrameworkCore.Triggered/Internal/TriggeredDbContextFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public TContext CreateDbContext()
3131
var applicationTriggerServiceProviderAccessor = context.GetService<ApplicationTriggerServiceProviderAccessor>();
3232
if (applicationTriggerServiceProviderAccessor != null)
3333
{
34-
applicationTriggerServiceProviderAccessor.SetTriggerServiceProvider(_serviceProvider);
34+
applicationTriggerServiceProviderAccessor.SetTriggerServiceProvider(new HybridServiceProvider(_serviceProvider, context));
3535
}
3636

3737
return context;

test/EntityFrameworkCore.Triggered.Tests/Internal/TriggerFactoryTests.cs

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,15 @@ public SampleTrigger2(TriggerFactory triggerFactory)
3535
public Task BeforeSave(ITriggerContext<object> context, CancellationToken cancellationToken) => throw new NotImplementedException();
3636
}
3737

38-
class SampleTrigger3 : IBeforeSaveTrigger<object>
38+
class SampleTrigger3<TDbContext> : IBeforeSaveTrigger<object>
39+
where TDbContext : DbContext
3940
{
40-
public SampleTrigger3(SampleDbContext3 dbContext)
41+
public SampleTrigger3(TDbContext dbContext)
4142
{
4243
DbContext = dbContext;
4344
}
4445

45-
public SampleDbContext3 DbContext { get; }
46+
public TDbContext DbContext { get; }
4647

4748
public Task BeforeSave(ITriggerContext<object> context, CancellationToken cancellationToken) => throw new NotImplementedException();
4849
}
@@ -53,7 +54,11 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
5354
{
5455
optionsBuilder
5556
.UseInMemoryDatabase(nameof(SampleDbContext3))
56-
.UseTriggers(triggerOptions => triggerOptions.AddTrigger<SampleTrigger3>());
57+
.UseTriggers(triggerOptions =>
58+
triggerOptions
59+
.AddTrigger<SampleTrigger3<SampleDbContext3>>()
60+
.AddTrigger<SampleTrigger3<DbContext>>()
61+
);
5762
optionsBuilder.ConfigureWarnings(warningOptions => {
5863
warningOptions.Ignore(CoreEventId.ManyServiceProvidersCreatedWarning);
5964
});
@@ -111,5 +116,31 @@ public void Resolve_FromInternalServices_GetsConstructedUsingExternalServiceProv
111116
Assert.NotNull(trigger);
112117
Assert.Equal(subject, trigger.TriggerFactory);
113118
}
119+
120+
[Fact]
121+
public void Resolve_FromHybridServices_GetsPasedTheConcreteDbContext()
122+
{
123+
using var dbContext = new SampleDbContext3();
124+
var factory = dbContext.GetService<TriggerFactory>();
125+
var serviceProvider = new HybridServiceProvider(dbContext.GetInfrastructure(), dbContext);
126+
127+
var trigger = factory.Resolve(serviceProvider, typeof(IBeforeSaveTrigger<object>)).FirstOrDefault() as SampleTrigger3<SampleDbContext3>;
128+
129+
Assert.NotNull(trigger);
130+
Assert.Equal(dbContext, trigger.DbContext);
131+
}
132+
133+
[Fact]
134+
public void Resolve_FromHybridServices_GetsPasedTheAbstractDbContext()
135+
{
136+
using var dbContext = new SampleDbContext3();
137+
var factory = dbContext.GetService<TriggerFactory>();
138+
var serviceProvider = new HybridServiceProvider(dbContext.GetInfrastructure(), dbContext);
139+
140+
var trigger = factory.Resolve(serviceProvider, typeof(IBeforeSaveTrigger<object>)).LastOrDefault() as SampleTrigger3<DbContext>;
141+
142+
Assert.NotNull(trigger);
143+
Assert.Equal(dbContext, trigger.DbContext);
144+
}
114145
}
115146
}

0 commit comments

Comments
 (0)