@@ -91,13 +91,15 @@ public void AddAssemblyTriggers_WithAssembly_RegistersWithThatAssembly()
9191
9292 protected async Task SaveChanges_TriggeredAddedThroughDI_Template ( Func < IServiceCollection , IServiceCollection > transform )
9393 {
94- var serviceProvider = transform ( new ServiceCollection ( )
94+ var services = transform ( new ServiceCollection ( )
9595 . AddTriggeredDbContext < TestDbContext > ( options => {
9696 options . UseInMemoryDatabase ( "test" ) ;
9797 options . ConfigureWarnings ( warningOptions => {
9898 warningOptions . Ignore ( CoreEventId . ManyServiceProvidersCreatedWarning ) ;
9999 } ) ;
100- } ) )
100+ } ) ) ;
101+
102+ var serviceProvider = services
101103 . BuildServiceProvider ( ) ;
102104
103105 using var dbContext = serviceProvider . GetRequiredService < TestDbContext > ( ) ;
@@ -132,5 +134,103 @@ public void AddAssemblyTriggers_AbstractTrigger_GetsIgnored()
132134 // Ensure that we did not register the AbstractTrigger
133135 Assert . Empty ( serviceCollection . Where ( x => x . ImplementationType == typeof ( AbstractTrigger ) ) ) ;
134136 }
137+
138+ [ Theory ]
139+ [ MemberData ( nameof ( Lifetimes ) ) ]
140+ public void AddTrigger_Multiple_AddsRegistrationForAll ( ServiceLifetime lifetime )
141+ {
142+ var serviceCollection = new ServiceCollection ( )
143+ . AddTrigger < SampleTrigger > ( lifetime )
144+ . AddTrigger < Trigger < object > > ( lifetime ) ;
145+
146+ Assert . Equal ( 9 , serviceCollection . Count ) ;
147+ }
148+
149+ [ Theory ]
150+ [ MemberData ( nameof ( Lifetimes ) ) ]
151+ public void AddAssemblyTriggers_Multiple_AddsRegistrationForAll ( ServiceLifetime lifetime )
152+ {
153+ var serviceCollection = new ServiceCollection ( )
154+ . AddTrigger < SampleTrigger > ( lifetime )
155+ . AddAssemblyTriggers ( typeof ( Trigger < object > ) . Assembly ) ;
156+
157+ Assert . Equal ( 9 , serviceCollection . Count ) ;
158+ }
159+
160+ [ Fact ]
161+ public void AddTriggerInstance_DoesNotDoubleRegister ( )
162+ {
163+ var trigger = new SampleTrigger ( ) ;
164+
165+ var serviceCollection = new ServiceCollection ( )
166+ . AddTrigger ( trigger )
167+ . AddTrigger ( trigger ) ;
168+
169+ Assert . Single ( serviceCollection , x => x . ImplementationInstance == trigger ) ;
170+ }
171+
172+ [ Theory ]
173+ [ MemberData ( nameof ( Lifetimes ) ) ]
174+ public void AddTrigger_DoesNotDoubleRegister ( ServiceLifetime lifetime )
175+ {
176+ var serviceCollection = new ServiceCollection ( )
177+ . AddTrigger < SampleTrigger > ( lifetime )
178+ . AddTrigger < SampleTrigger > ( lifetime ) ;
179+
180+ Assert . Single ( serviceCollection , x => x . ServiceType == typeof ( SampleTrigger ) ) ;
181+ }
182+
183+ [ Theory ]
184+ [ MemberData ( nameof ( Lifetimes ) ) ]
185+ public void AddTrigger_DoesNotDoubleRegister2 ( ServiceLifetime lifetime )
186+ {
187+ var serviceCollection = new ServiceCollection ( )
188+ . AddAssemblyTriggers ( lifetime )
189+ . AddTrigger < SampleTrigger > ( lifetime ) ;
190+
191+ Assert . Single ( serviceCollection , x => x . ServiceType == typeof ( SampleTrigger ) ) ;
192+ }
193+
194+ [ Theory ]
195+ [ MemberData ( nameof ( Lifetimes ) ) ]
196+ public void AddAssemblyTrigger_DoesNotDoubleRegister ( ServiceLifetime lifetime )
197+ {
198+ var serviceCollection = new ServiceCollection ( )
199+ . AddAssemblyTriggers ( lifetime )
200+ . AddAssemblyTriggers ( lifetime ) ;
201+
202+ Assert . Single ( serviceCollection , x => x . ServiceType == typeof ( SampleTrigger ) ) ;
203+ }
204+
205+ [ Theory ]
206+ [ MemberData ( nameof ( Lifetimes ) ) ]
207+ public void AddAssemblyTrigger_DoesNotDoubleRegister2 ( ServiceLifetime lifetime )
208+ {
209+ var serviceCollection = new ServiceCollection ( )
210+ . AddTrigger < SampleTrigger > ( lifetime )
211+ . AddAssemblyTriggers ( lifetime ) ;
212+
213+ Assert . Single ( serviceCollection , x => x . ServiceType == typeof ( SampleTrigger ) ) ;
214+ }
215+
216+ [ Fact ]
217+ public void AddTrigger_WhenExplicitlyRegisteredAsAService_OnlyAddsTheTriggerTypeRegistrations ( )
218+ {
219+ var serviceCollection = new ServiceCollection ( )
220+ . AddSingleton < SampleTrigger > ( )
221+ . AddTrigger < SampleTrigger > ( ) ;
222+
223+ Assert . Equal ( 5 , serviceCollection . Count ) ;
224+ }
225+
226+ [ Fact ]
227+ public void AddAssemblyTriggers_WhenExplicitlyRegisteredAsAService_OnlyAddsTheTriggerTypeRegistrations ( )
228+ {
229+ var serviceCollection = new ServiceCollection ( )
230+ . AddSingleton < SampleTrigger > ( )
231+ . AddAssemblyTriggers ( ) ;
232+
233+ Assert . Equal ( 5 , serviceCollection . Count ) ;
234+ }
135235 }
136236}
0 commit comments