Skip to content

Commit 1b19369

Browse files
committed
2 parents d985fc0 + 70a48c1 commit 1b19369

2 files changed

Lines changed: 36 additions & 5 deletions

File tree

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)