@@ -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