Skip to content

Commit 26338d2

Browse files
authored
Merge pull request #163 from cjblomqvist/assembly-issue-updated
Fix for #154
2 parents 981c063 + c646709 commit 26338d2

File tree

3 files changed

+55
-7
lines changed

3 files changed

+55
-7
lines changed

src/EntityFrameworkCore.Triggered.Extensions/ServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public static IServiceCollection AddAssemblyTriggers(this IServiceCollection ser
105105
registered = true;
106106
}
107107

108-
services.TryAdd(new ServiceDescriptor(triggerType, sp => sp.GetRequiredService(assemblyType), ServiceLifetime.Transient));
108+
services.Add(new ServiceDescriptor(triggerType, sp => sp.GetRequiredService(assemblyType), ServiceLifetime.Transient));
109109
}
110110
}
111111

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using EntityFrameworkCore.Triggered.Lifecycles;
5+
6+
namespace EntityFrameworkCore.Triggered.Extensions.Tests
7+
{
8+
public class SampleTriggerClone : Trigger<object>, IBeforeSaveStartingAsyncTrigger
9+
{
10+
public int BeforeSaveCalls;
11+
public int BeforeSaveAsyncCalls;
12+
13+
public int AfterSaveCalls;
14+
public int AfterSaveAsyncCalls;
15+
16+
public int AfterSaveFailedCalls;
17+
public int AfterSaveFailedAsyncCalls;
18+
19+
public int BeforeSaveStartingTriggerCalls;
20+
21+
22+
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
23+
public override void BeforeSave(ITriggerContext<object> context) => BeforeSaveCalls += 1;
24+
public override async Task BeforeSaveAsync(ITriggerContext<object> context, CancellationToken cancellationToken) => BeforeSaveAsyncCalls += 1;
25+
26+
public override void AfterSave(ITriggerContext<object> context) => AfterSaveCalls += 1;
27+
public override async Task AfterSaveAsync(ITriggerContext<object> context, CancellationToken cancellationToken) => AfterSaveAsyncCalls += 1;
28+
29+
public override void AfterSaveFailed(ITriggerContext<object> context, Exception exception) => AfterSaveFailedCalls += 1;
30+
public override async Task AfterSaveFailedAsync(ITriggerContext<object> context, Exception exception, CancellationToken cancellationToken) => AfterSaveFailedAsyncCalls += 1;
31+
public async Task BeforeSaveStartingAsync(CancellationToken cancellationToken) => BeforeSaveStartingTriggerCalls += 1;
32+
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
33+
}
34+
}

test/EntityFrameworkCore.Triggered.Extensions.Tests/ServiceCollectionExtensionsTests.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public void AddAssemblyTriggers_WithAssembly_RegistersWithThatAssembly()
8686
var serviceCollection = new ServiceCollection()
8787
.AddAssemblyTriggers(typeof(ServiceCollectionExtensionsTests).Assembly);
8888

89-
Assert.Equal(8, serviceCollection.Count);
89+
Assert.Equal(16, serviceCollection.Count);
9090
}
9191

9292
protected async Task SaveChanges_TriggeredAddedThroughDI_Template(Func<IServiceCollection, IServiceCollection> transform)
@@ -108,18 +108,29 @@ protected async Task SaveChanges_TriggeredAddedThroughDI_Template(Func<IServiceC
108108
await dbContext.SaveChangesAsync();
109109

110110
var trigger = serviceProvider.GetRequiredService<SampleTrigger>();
111+
var triggerClone = serviceProvider.GetRequiredService<SampleTriggerClone>();
111112

112113
Assert.Equal(1, trigger.BeforeSaveStartingTriggerCalls);
113114
Assert.Equal(1, trigger.BeforeSaveCalls);
114115
Assert.Equal(1, trigger.BeforeSaveAsyncCalls);
115116
Assert.Equal(1, trigger.AfterSaveCalls);
116117
Assert.Equal(1, trigger.AfterSaveAsyncCalls);
118+
119+
Assert.Equal(1, triggerClone.BeforeSaveStartingTriggerCalls);
120+
Assert.Equal(1, triggerClone.BeforeSaveCalls);
121+
Assert.Equal(1, triggerClone.BeforeSaveAsyncCalls);
122+
Assert.Equal(1, triggerClone.AfterSaveCalls);
123+
Assert.Equal(1, triggerClone.AfterSaveAsyncCalls);
117124
}
118125

119126
[Fact]
120127
public Task SaveChanges_ExplicitlyAddedTriggerThroughDI_RaisesAllTriggerTypes()
121-
=> SaveChanges_TriggeredAddedThroughDI_Template(x => x.AddTrigger<SampleTrigger>());
122-
128+
=> SaveChanges_TriggeredAddedThroughDI_Template(x => {
129+
x.AddTrigger<SampleTrigger>();
130+
x.AddTrigger<SampleTriggerClone>();
131+
132+
return x;
133+
});
123134

124135
[Fact]
125136
public Task SaveChanges_DiscoveredTriggerThroughDI_RaisesAllTriggerTypes()
@@ -141,9 +152,10 @@ public void AddTrigger_Multiple_AddsRegistrationForAll(ServiceLifetime lifetime)
141152
{
142153
var serviceCollection = new ServiceCollection()
143154
.AddTrigger<SampleTrigger>(lifetime)
155+
.AddTrigger<SampleTriggerClone>(lifetime)
144156
.AddTrigger<Trigger<object>>(lifetime);
145157

146-
Assert.Equal(15, serviceCollection.Count);
158+
Assert.Equal(23, serviceCollection.Count);
147159
}
148160

149161
[Theory]
@@ -152,9 +164,10 @@ public void AddAssemblyTriggers_Multiple_AddsRegistrationForAll(ServiceLifetime
152164
{
153165
var serviceCollection = new ServiceCollection()
154166
.AddTrigger<SampleTrigger>(lifetime)
167+
.AddTrigger<SampleTriggerClone>(lifetime)
155168
.AddAssemblyTriggers(typeof(Trigger<object>).Assembly);
156169

157-
Assert.Equal(15, serviceCollection.Count);
170+
Assert.Equal(23, serviceCollection.Count);
158171
}
159172

160173
[Fact]
@@ -228,9 +241,10 @@ public void AddAssemblyTriggers_WhenExplicitlyRegisteredAsAService_OnlyAddsTheTr
228241
{
229242
var serviceCollection = new ServiceCollection()
230243
.AddSingleton<SampleTrigger>()
244+
.AddSingleton<SampleTriggerClone>()
231245
.AddAssemblyTriggers();
232246

233-
Assert.Equal(8, serviceCollection.Count);
247+
Assert.Equal(16, serviceCollection.Count);
234248
}
235249
}
236250
}

0 commit comments

Comments
 (0)