Skip to content
This repository was archived by the owner on Jul 30, 2025. It is now read-only.

Commit 2ca4cdb

Browse files
committed
improve register extension methods
1 parent 080ac2e commit 2ca4cdb

File tree

12 files changed

+156
-213
lines changed

12 files changed

+156
-213
lines changed

samples/Tracker.WebService.EntityFrameworkCore/Tracker.WebService.EntityFrameworkCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<PackageReference Include="Hangfire.AspNetCore" Version="1.8.17" />
1919
<PackageReference Include="Hangfire.SqlServer" Version="1.8.17" />
2020
<PackageReference Include="Injectio" Version="4.0.0" PrivateAssets="all" />
21-
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.1" />
21+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.2" />
2222
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
2323
<PackageReference Include="Swashbuckle.AspNetCore" Version="7.2.0" />
2424
</ItemGroup>

src/MediatR.CommandQuery.Cosmos/DomainServiceExtensions.cs

Lines changed: 6 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
using Cosmos.Abstracts;
22

3-
using MediatR.CommandQuery.Behaviors;
43
using MediatR.CommandQuery.Commands;
54
using MediatR.CommandQuery.Cosmos.Handlers;
65
using MediatR.CommandQuery.Definitions;
7-
using MediatR.CommandQuery.Extensions;
86
using MediatR.CommandQuery.Queries;
9-
using MediatR.CommandQuery.Services;
107

118
using Microsoft.Extensions.DependencyInjection;
129
using Microsoft.Extensions.DependencyInjection.Extensions;
@@ -28,20 +25,7 @@ public static IServiceCollection AddEntityQueries<TRepository, TEntity, TReadMod
2825
services.TryAddTransient<IRequestHandler<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, EntityPagedQueryHandler<TRepository, TEntity, TReadModel>>();
2926
services.TryAddTransient<IRequestHandler<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, EntitySelectQueryHandler<TRepository, TEntity, TReadModel>>();
3027

31-
// pipeline registration, run in order registered
32-
bool supportsTenant = typeof(TReadModel).Implements<IHaveTenant<string>>();
33-
if (supportsTenant)
34-
{
35-
services.AddTransient<IPipelineBehavior<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, TenantPagedQueryBehavior<string, TReadModel>>();
36-
services.AddTransient<IPipelineBehavior<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, TenantSelectQueryBehavior<string, TReadModel>>();
37-
}
38-
39-
bool supportsDeleted = typeof(TReadModel).Implements<ITrackDeleted>();
40-
if (supportsDeleted)
41-
{
42-
services.AddTransient<IPipelineBehavior<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, DeletedPagedQueryBehavior<TReadModel>>();
43-
services.AddTransient<IPipelineBehavior<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, DeletedSelectQueryBehavior<TReadModel>>();
44-
}
28+
services.AddEntityQueryBehaviors<string, TReadModel>();
4529

4630
return services;
4731
}
@@ -77,20 +61,7 @@ public static IServiceCollection AddEntityCreateCommand<TRepository, TEntity, TR
7761
services.TryAddTransient<IRequestHandler<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, EntityCreateCommandHandler<TRepository, TEntity, TCreateModel, TReadModel>>();
7862

7963
// pipeline registration, run in order registered
80-
var createType = typeof(TCreateModel);
81-
bool supportsTenant = createType.Implements<IHaveTenant<string>>();
82-
if (supportsTenant)
83-
{
84-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<string, TCreateModel, TReadModel>>();
85-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<string, TCreateModel, TReadModel>>();
86-
}
87-
88-
bool supportsTracking = createType.Implements<ITrackCreated>();
89-
if (supportsTracking)
90-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TCreateModel, TReadModel>>();
91-
92-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TCreateModel, TReadModel>>();
93-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TCreateModel, TReadModel>>();
64+
services.AddEntityCreateBehaviors<string, TReadModel, TCreateModel>();
9465

9566
return services;
9667
}
@@ -109,21 +80,7 @@ public static IServiceCollection AddEntityUpdateCommand<TRepository, TEntity, TR
10980
// standard crud commands
11081
services.TryAddTransient<IRequestHandler<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityUpdateCommandHandler<TRepository, TEntity, TUpdateModel, TReadModel>>();
11182

112-
// pipeline registration, run in order registered
113-
var updateType = typeof(TUpdateModel);
114-
bool supportsTenant = updateType.Implements<IHaveTenant<string>>();
115-
if (supportsTenant)
116-
{
117-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<string, TUpdateModel, TReadModel>>();
118-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<string, TUpdateModel, TReadModel>>();
119-
}
120-
121-
bool supportsTracking = updateType.Implements<ITrackUpdated>();
122-
if (supportsTracking)
123-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TUpdateModel, TReadModel>>();
124-
125-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TUpdateModel, TReadModel>>();
126-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TUpdateModel, TReadModel>>();
83+
services.AddEntityUpdateBehaviors<string, TReadModel, TUpdateModel>();
12784

12885
return services;
12986
}
@@ -138,21 +95,7 @@ public static IServiceCollection AddEntityUpsertCommand<TRepository, TEntity, TR
13895
// standard crud commands
13996
services.TryAddTransient<IRequestHandler<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityUpsertCommandHandler<TRepository, TEntity, TUpdateModel, TReadModel>>();
14097

141-
// pipeline registration, run in order registered
142-
var updateType = typeof(TUpdateModel);
143-
bool supportsTenant = updateType.Implements<IHaveTenant<string>>();
144-
if (supportsTenant)
145-
{
146-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<string, TUpdateModel, TReadModel>>();
147-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<string, TUpdateModel, TReadModel>>();
148-
}
149-
150-
bool supportsTracking = updateType.Implements<ITrackUpdated>();
151-
if (supportsTracking)
152-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TUpdateModel, TReadModel>>();
153-
154-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TUpdateModel, TReadModel>>();
155-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<string, TUpdateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TUpdateModel, TReadModel>>();
98+
services.AddEntityUpsertBehaviors<string, TReadModel, TUpdateModel>();
15699

157100
return services;
158101
}
@@ -166,8 +109,7 @@ public static IServiceCollection AddEntityPatchCommand<TRepository, TEntity, TRe
166109
// standard crud commands
167110
services.TryAddTransient<IRequestHandler<EntityPatchCommand<string, TReadModel>, TReadModel>, EntityPatchCommandHandler<TRepository, TEntity, TReadModel>>();
168111

169-
// pipeline registration, run in order registered
170-
services.AddTransient<IPipelineBehavior<EntityPatchCommand<string, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TEntity, TReadModel>>();
112+
services.AddEntityPatchBehaviors<string, TEntity, TReadModel>();
171113

172114
return services;
173115
}
@@ -181,8 +123,7 @@ public static IServiceCollection AddEntityDeleteCommand<TRepository, TEntity, TR
181123
// standard crud commands
182124
services.TryAddTransient<IRequestHandler<EntityDeleteCommand<string, TReadModel>, TReadModel>, EntityDeleteCommandHandler<TRepository, TEntity, TReadModel>>();
183125

184-
// pipeline registration, run in order registered
185-
services.AddTransient<IPipelineBehavior<EntityDeleteCommand<string, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<string, TEntity, TReadModel>>();
126+
services.AddEntityDeleteBehaviors<string, TEntity, TReadModel>();
186127

187128
return services;
188129
}

src/MediatR.CommandQuery.EntityFrameworkCore/DomainServiceExtensions.cs

Lines changed: 7 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
using MediatR.CommandQuery.Behaviors;
21
using MediatR.CommandQuery.Commands;
32
using MediatR.CommandQuery.Definitions;
43
using MediatR.CommandQuery.EntityFrameworkCore.Handlers;
5-
using MediatR.CommandQuery.Extensions;
64
using MediatR.CommandQuery.Queries;
75
using MediatR.CommandQuery.Services;
86

@@ -29,20 +27,7 @@ public static IServiceCollection AddEntityQueries<TContext, TEntity, TKey, TRead
2927
services.TryAddTransient<IRequestHandler<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, EntityPagedQueryHandler<TContext, TEntity, TReadModel>>();
3028
services.TryAddTransient<IRequestHandler<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, EntitySelectQueryHandler<TContext, TEntity, TReadModel>>();
3129

32-
// pipeline registration, run in order registered
33-
bool supportsTenant = typeof(TReadModel).Implements<IHaveTenant<TKey>>();
34-
if (supportsTenant)
35-
{
36-
services.AddTransient<IPipelineBehavior<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, TenantPagedQueryBehavior<TKey, TReadModel>>();
37-
services.AddTransient<IPipelineBehavior<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, TenantSelectQueryBehavior<TKey, TReadModel>>();
38-
}
39-
40-
bool supportsDeleted = typeof(TReadModel).Implements<ITrackDeleted>();
41-
if (supportsDeleted)
42-
{
43-
services.AddTransient<IPipelineBehavior<EntityPagedQuery<TReadModel>, EntityPagedResult<TReadModel>>, DeletedPagedQueryBehavior<TReadModel>>();
44-
services.AddTransient<IPipelineBehavior<EntitySelectQuery<TReadModel>, IReadOnlyCollection<TReadModel>>, DeletedSelectQueryBehavior<TReadModel>>();
45-
}
30+
services.AddEntityQueryBehaviors<TKey, TReadModel>();
4631

4732
return services;
4833
}
@@ -81,21 +66,7 @@ public static IServiceCollection AddEntityCreateCommand<TContext, TEntity, TKey,
8166
// standard crud commands
8267
services.TryAddTransient<IRequestHandler<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, EntityCreateCommandHandler<TContext, TEntity, TKey, TCreateModel, TReadModel>>();
8368

84-
// pipeline registration, run in order registered
85-
var createType = typeof(TCreateModel);
86-
bool supportsTenant = createType.Implements<IHaveTenant<TKey>>();
87-
if (supportsTenant)
88-
{
89-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<TKey, TCreateModel, TReadModel>>();
90-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<TKey, TCreateModel, TReadModel>>();
91-
}
92-
93-
bool supportsTracking = createType.Implements<ITrackCreated>();
94-
if (supportsTracking)
95-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TCreateModel, TReadModel>>();
96-
97-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TCreateModel, TReadModel>>();
98-
services.AddTransient<IPipelineBehavior<EntityCreateCommand<TCreateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<TKey, TCreateModel, TReadModel>>();
69+
services.AddEntityCreateBehaviors<TKey, TReadModel, TCreateModel>();
9970

10071
return services;
10172
}
@@ -114,21 +85,7 @@ public static IServiceCollection AddEntityUpdateCommand<TContext, TEntity, TKey,
11485
// standard crud commands
11586
services.TryAddTransient<IRequestHandler<EntityUpdateCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, EntityUpdateCommandHandler<TContext, TEntity, TKey, TUpdateModel, TReadModel>>();
11687

117-
// pipeline registration, run in order registered
118-
var updateType = typeof(TUpdateModel);
119-
bool supportsTenant = updateType.Implements<IHaveTenant<TKey>>();
120-
if (supportsTenant)
121-
{
122-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<TKey, TUpdateModel, TReadModel>>();
123-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<TKey, TUpdateModel, TReadModel>>();
124-
}
125-
126-
bool supportsTracking = updateType.Implements<ITrackUpdated>();
127-
if (supportsTracking)
128-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TUpdateModel, TReadModel>>();
129-
130-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TUpdateModel, TReadModel>>();
131-
services.AddTransient<IPipelineBehavior<EntityUpdateCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<TKey, TUpdateModel, TReadModel>>();
88+
services.AddEntityUpdateBehaviors<TKey, TReadModel, TUpdateModel>();
13289

13390
return services;
13491
}
@@ -143,21 +100,7 @@ public static IServiceCollection AddEntityUpsertCommand<TContext, TEntity, TKey,
143100
// standard crud commands
144101
services.TryAddTransient<IRequestHandler<EntityUpsertCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, EntityUpsertCommandHandler<TContext, TEntity, TKey, TUpdateModel, TReadModel>>();
145102

146-
// pipeline registration, run in order registered
147-
var updateType = typeof(TUpdateModel);
148-
bool supportsTenant = updateType.Implements<IHaveTenant<TKey>>();
149-
if (supportsTenant)
150-
{
151-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, TenantDefaultCommandBehavior<TKey, TUpdateModel, TReadModel>>();
152-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, TenantAuthenticateCommandBehavior<TKey, TUpdateModel, TReadModel>>();
153-
}
154-
155-
bool supportsTracking = updateType.Implements<ITrackUpdated>();
156-
if (supportsTracking)
157-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, TrackChangeCommandBehavior<TUpdateModel, TReadModel>>();
158-
159-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, ValidateEntityModelCommandBehavior<TUpdateModel, TReadModel>>();
160-
services.AddTransient<IPipelineBehavior<EntityUpsertCommand<TKey, TUpdateModel, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<TKey, TUpdateModel, TReadModel>>();
103+
services.AddEntityUpsertBehaviors<TKey, TReadModel, TUpdateModel>();
161104

162105
return services;
163106
}
@@ -171,8 +114,7 @@ public static IServiceCollection AddEntityPatchCommand<TContext, TEntity, TKey,
171114
// standard crud commands
172115
services.TryAddTransient<IRequestHandler<EntityPatchCommand<TKey, TReadModel>, TReadModel>, EntityPatchCommandHandler<TContext, TEntity, TKey, TReadModel>>();
173116

174-
// pipeline registration, run in order registered
175-
services.AddTransient<IPipelineBehavior<EntityPatchCommand<TKey, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<TKey, TEntity, TReadModel>>();
117+
services.AddEntityPatchBehaviors<TKey, TEntity, TReadModel>();
176118

177119
return services;
178120
}
@@ -186,9 +128,9 @@ public static IServiceCollection AddEntityDeleteCommand<TContext, TEntity, TKey,
186128
// standard crud commands
187129
services.TryAddTransient<IRequestHandler<EntityDeleteCommand<TKey, TReadModel>, TReadModel>, EntityDeleteCommandHandler<TContext, TEntity, TKey, TReadModel>>();
188130

189-
// pipeline registration, run in order registered
190-
services.AddTransient<IPipelineBehavior<EntityDeleteCommand<TKey, TReadModel>, TReadModel>, EntityChangeNotificationBehavior<TKey, TEntity, TReadModel>>();
131+
services.AddEntityDeleteBehaviors<TKey, TEntity, TReadModel>();
191132

192133
return services;
193134
}
135+
194136
}

src/MediatR.CommandQuery.EntityFrameworkCore/MediatR.CommandQuery.EntityFrameworkCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<ItemGroup>
1010
<PackageReference Include="AutoMapper" Version="13.0.1" />
11-
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.1" />
11+
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.2" />
1212
</ItemGroup>
1313

1414
<ItemGroup>

0 commit comments

Comments
 (0)