@@ -89,7 +89,7 @@ public void ConfigureResourceGraph(ICollection<Type> dbContextTypes, Action<Reso
89
89
90
90
_options . SerializerOptions . Converters . Add ( new ResourceObjectConverter ( resourceGraph ) ) ;
91
91
92
- _services . AddSingleton ( resourceGraph ) ;
92
+ _services . TryAddSingleton ( resourceGraph ) ;
93
93
}
94
94
95
95
/// <summary>
@@ -109,7 +109,7 @@ public void ConfigureMvc()
109
109
if ( _options . ValidateModelState )
110
110
{
111
111
_mvcBuilder . AddDataAnnotations ( ) ;
112
- _services . AddSingleton < IModelMetadataProvider , JsonApiModelMetadataProvider > ( ) ;
112
+ _services . Replace ( new ServiceDescriptor ( typeof ( IModelMetadataProvider ) , typeof ( JsonApiModelMetadataProvider ) , ServiceLifetime . Singleton ) ) ;
113
113
}
114
114
}
115
115
@@ -130,19 +130,19 @@ public void ConfigureServiceContainer(ICollection<Type> dbContextTypes)
130
130
131
131
if ( dbContextTypes . Any ( ) )
132
132
{
133
- _services . AddScoped ( typeof ( DbContextResolver < > ) ) ;
133
+ _services . TryAddScoped ( typeof ( DbContextResolver < > ) ) ;
134
134
135
135
foreach ( Type dbContextType in dbContextTypes )
136
136
{
137
137
Type dbContextResolverClosedType = typeof ( DbContextResolver < > ) . MakeGenericType ( dbContextType ) ;
138
- _services . AddScoped ( typeof ( IDbContextResolver ) , dbContextResolverClosedType ) ;
138
+ _services . TryAddScoped ( typeof ( IDbContextResolver ) , dbContextResolverClosedType ) ;
139
139
}
140
140
141
- _services . AddScoped < IOperationsTransactionFactory , EntityFrameworkCoreTransactionFactory > ( ) ;
141
+ _services . TryAddScoped < IOperationsTransactionFactory , EntityFrameworkCoreTransactionFactory > ( ) ;
142
142
}
143
143
else
144
144
{
145
- _services . AddScoped < IOperationsTransactionFactory , MissingTransactionFactory > ( ) ;
145
+ _services . TryAddScoped < IOperationsTransactionFactory , MissingTransactionFactory > ( ) ;
146
146
}
147
147
148
148
AddResourceLayer ( ) ;
@@ -153,46 +153,46 @@ public void ConfigureServiceContainer(ICollection<Type> dbContextTypes)
153
153
AddQueryStringLayer ( ) ;
154
154
AddOperationsLayer ( ) ;
155
155
156
- _services . AddScoped ( typeof ( IResourceChangeTracker < > ) , typeof ( ResourceChangeTracker < > ) ) ;
157
- _services . AddScoped < IPaginationContext , PaginationContext > ( ) ;
158
- _services . AddScoped < IEvaluatedIncludeCache , EvaluatedIncludeCache > ( ) ;
159
- _services . AddScoped < ISparseFieldSetCache , SparseFieldSetCache > ( ) ;
160
- _services . AddScoped < IQueryLayerComposer , QueryLayerComposer > ( ) ;
161
- _services . AddScoped < IInverseNavigationResolver , InverseNavigationResolver > ( ) ;
156
+ _services . TryAddScoped ( typeof ( IResourceChangeTracker < > ) , typeof ( ResourceChangeTracker < > ) ) ;
157
+ _services . TryAddScoped < IPaginationContext , PaginationContext > ( ) ;
158
+ _services . TryAddScoped < IEvaluatedIncludeCache , EvaluatedIncludeCache > ( ) ;
159
+ _services . TryAddScoped < ISparseFieldSetCache , SparseFieldSetCache > ( ) ;
160
+ _services . TryAddScoped < IQueryLayerComposer , QueryLayerComposer > ( ) ;
161
+ _services . TryAddScoped < IInverseNavigationResolver , InverseNavigationResolver > ( ) ;
162
162
}
163
163
164
164
private void AddMiddlewareLayer ( )
165
165
{
166
- _services . AddSingleton < IJsonApiOptions > ( _options ) ;
167
- _services . AddSingleton < IJsonApiApplicationBuilder > ( this ) ;
168
- _services . AddSingleton < IExceptionHandler , ExceptionHandler > ( ) ;
169
- _services . AddScoped < IAsyncJsonApiExceptionFilter , AsyncJsonApiExceptionFilter > ( ) ;
170
- _services . AddScoped < IAsyncQueryStringActionFilter , AsyncQueryStringActionFilter > ( ) ;
171
- _services . AddScoped < IAsyncConvertEmptyActionResultFilter , AsyncConvertEmptyActionResultFilter > ( ) ;
172
- _services . AddSingleton < IJsonApiInputFormatter , JsonApiInputFormatter > ( ) ;
173
- _services . AddSingleton < IJsonApiOutputFormatter , JsonApiOutputFormatter > ( ) ;
174
- _services . AddSingleton < IJsonApiRoutingConvention , JsonApiRoutingConvention > ( ) ;
175
- _services . AddSingleton < IControllerResourceMapping > ( sp => sp . GetRequiredService < IJsonApiRoutingConvention > ( ) ) ;
176
- _services . AddSingleton < IHttpContextAccessor , HttpContextAccessor > ( ) ;
177
- _services . AddScoped < IJsonApiRequest , JsonApiRequest > ( ) ;
178
- _services . AddScoped < IJsonApiWriter , JsonApiWriter > ( ) ;
179
- _services . AddScoped < IJsonApiReader , JsonApiReader > ( ) ;
180
- _services . AddScoped < ITargetedFields , TargetedFields > ( ) ;
166
+ _services . TryAddSingleton < IJsonApiOptions > ( _options ) ;
167
+ _services . TryAddSingleton < IJsonApiApplicationBuilder > ( this ) ;
168
+ _services . TryAddSingleton < IExceptionHandler , ExceptionHandler > ( ) ;
169
+ _services . TryAddScoped < IAsyncJsonApiExceptionFilter , AsyncJsonApiExceptionFilter > ( ) ;
170
+ _services . TryAddScoped < IAsyncQueryStringActionFilter , AsyncQueryStringActionFilter > ( ) ;
171
+ _services . TryAddScoped < IAsyncConvertEmptyActionResultFilter , AsyncConvertEmptyActionResultFilter > ( ) ;
172
+ _services . TryAddSingleton < IJsonApiInputFormatter , JsonApiInputFormatter > ( ) ;
173
+ _services . TryAddSingleton < IJsonApiOutputFormatter , JsonApiOutputFormatter > ( ) ;
174
+ _services . TryAddSingleton < IJsonApiRoutingConvention , JsonApiRoutingConvention > ( ) ;
175
+ _services . TryAddSingleton < IControllerResourceMapping > ( provider => provider . GetRequiredService < IJsonApiRoutingConvention > ( ) ) ;
176
+ _services . TryAddSingleton < IHttpContextAccessor , HttpContextAccessor > ( ) ;
177
+ _services . TryAddScoped < IJsonApiRequest , JsonApiRequest > ( ) ;
178
+ _services . TryAddScoped < IJsonApiWriter , JsonApiWriter > ( ) ;
179
+ _services . TryAddScoped < IJsonApiReader , JsonApiReader > ( ) ;
180
+ _services . TryAddScoped < ITargetedFields , TargetedFields > ( ) ;
181
181
}
182
182
183
183
private void AddResourceLayer ( )
184
184
{
185
185
RegisterImplementationForInterfaces ( ServiceDiscoveryFacade . ResourceDefinitionUnboundInterfaces , typeof ( JsonApiResourceDefinition < , > ) ) ;
186
186
187
- _services . AddScoped < IResourceDefinitionAccessor , ResourceDefinitionAccessor > ( ) ;
188
- _services . AddScoped < IResourceFactory , ResourceFactory > ( ) ;
187
+ _services . TryAddScoped < IResourceDefinitionAccessor , ResourceDefinitionAccessor > ( ) ;
188
+ _services . TryAddScoped < IResourceFactory , ResourceFactory > ( ) ;
189
189
}
190
190
191
191
private void AddRepositoryLayer ( )
192
192
{
193
193
RegisterImplementationForInterfaces ( ServiceDiscoveryFacade . RepositoryUnboundInterfaces , typeof ( EntityFrameworkCoreRepository < , > ) ) ;
194
194
195
- _services . AddScoped < IResourceRepositoryAccessor , ResourceRepositoryAccessor > ( ) ;
195
+ _services . TryAddScoped < IResourceRepositoryAccessor , ResourceRepositoryAccessor > ( ) ;
196
196
197
197
_services . TryAddTransient < IQueryableBuilder , QueryableBuilder > ( ) ;
198
198
_services . TryAddTransient < IIncludeClauseBuilder , IncludeClauseBuilder > ( ) ;
@@ -225,12 +225,12 @@ private void AddQueryStringLayer()
225
225
_services . TryAddTransient < ISparseFieldSetParser , SparseFieldSetParser > ( ) ;
226
226
_services . TryAddTransient < IPaginationParser , PaginationParser > ( ) ;
227
227
228
- _services . AddScoped < IIncludeQueryStringParameterReader , IncludeQueryStringParameterReader > ( ) ;
229
- _services . AddScoped < IFilterQueryStringParameterReader , FilterQueryStringParameterReader > ( ) ;
230
- _services . AddScoped < ISortQueryStringParameterReader , SortQueryStringParameterReader > ( ) ;
231
- _services . AddScoped < ISparseFieldSetQueryStringParameterReader , SparseFieldSetQueryStringParameterReader > ( ) ;
232
- _services . AddScoped < IPaginationQueryStringParameterReader , PaginationQueryStringParameterReader > ( ) ;
233
- _services . AddScoped < IResourceDefinitionQueryableParameterReader , ResourceDefinitionQueryableParameterReader > ( ) ;
228
+ _services . TryAddScoped < IIncludeQueryStringParameterReader , IncludeQueryStringParameterReader > ( ) ;
229
+ _services . TryAddScoped < IFilterQueryStringParameterReader , FilterQueryStringParameterReader > ( ) ;
230
+ _services . TryAddScoped < ISortQueryStringParameterReader , SortQueryStringParameterReader > ( ) ;
231
+ _services . TryAddScoped < ISparseFieldSetQueryStringParameterReader , SparseFieldSetQueryStringParameterReader > ( ) ;
232
+ _services . TryAddScoped < IPaginationQueryStringParameterReader , PaginationQueryStringParameterReader > ( ) ;
233
+ _services . TryAddScoped < IResourceDefinitionQueryableParameterReader , ResourceDefinitionQueryableParameterReader > ( ) ;
234
234
235
235
RegisterDependentService < IQueryStringParameterReader , IIncludeQueryStringParameterReader > ( ) ;
236
236
RegisterDependentService < IQueryStringParameterReader , IFilterQueryStringParameterReader > ( ) ;
@@ -246,50 +246,50 @@ private void AddQueryStringLayer()
246
246
RegisterDependentService < IQueryConstraintProvider , IPaginationQueryStringParameterReader > ( ) ;
247
247
RegisterDependentService < IQueryConstraintProvider , IResourceDefinitionQueryableParameterReader > ( ) ;
248
248
249
- _services . AddScoped < IQueryStringReader , QueryStringReader > ( ) ;
250
- _services . AddSingleton < IRequestQueryStringAccessor , RequestQueryStringAccessor > ( ) ;
249
+ _services . TryAddScoped < IQueryStringReader , QueryStringReader > ( ) ;
250
+ _services . TryAddSingleton < IRequestQueryStringAccessor , RequestQueryStringAccessor > ( ) ;
251
251
}
252
252
253
253
private void RegisterDependentService < TCollectionElement , TElementToAdd > ( )
254
254
where TCollectionElement : class
255
255
where TElementToAdd : TCollectionElement
256
256
{
257
- _services . AddScoped < TCollectionElement > ( serviceProvider => serviceProvider . GetRequiredService < TElementToAdd > ( ) ) ;
257
+ _services . AddScoped < TCollectionElement > ( provider => provider . GetRequiredService < TElementToAdd > ( ) ) ;
258
258
}
259
259
260
260
private void AddSerializationLayer ( )
261
261
{
262
- _services . AddScoped < IResourceIdentifierObjectAdapter , ResourceIdentifierObjectAdapter > ( ) ;
263
- _services . AddScoped < IRelationshipDataAdapter , RelationshipDataAdapter > ( ) ;
264
- _services . AddScoped < IResourceObjectAdapter , ResourceObjectAdapter > ( ) ;
265
- _services . AddScoped < IResourceDataAdapter , ResourceDataAdapter > ( ) ;
266
- _services . AddScoped < IAtomicReferenceAdapter , AtomicReferenceAdapter > ( ) ;
267
- _services . AddScoped < IResourceDataInOperationsRequestAdapter , ResourceDataInOperationsRequestAdapter > ( ) ;
268
- _services . AddScoped < IAtomicOperationObjectAdapter , AtomicOperationObjectAdapter > ( ) ;
269
- _services . AddScoped < IDocumentInResourceOrRelationshipRequestAdapter , DocumentInResourceOrRelationshipRequestAdapter > ( ) ;
270
- _services . AddScoped < IDocumentInOperationsRequestAdapter , DocumentInOperationsRequestAdapter > ( ) ;
271
- _services . AddScoped < IDocumentAdapter , DocumentAdapter > ( ) ;
272
-
273
- _services . AddScoped < ILinkBuilder , LinkBuilder > ( ) ;
274
- _services . AddScoped < IResponseMeta , EmptyResponseMeta > ( ) ;
275
- _services . AddScoped < IMetaBuilder , MetaBuilder > ( ) ;
276
- _services . AddSingleton < IFingerprintGenerator , FingerprintGenerator > ( ) ;
277
- _services . AddSingleton < IETagGenerator , ETagGenerator > ( ) ;
278
- _services . AddScoped < IResponseModelAdapter , ResponseModelAdapter > ( ) ;
262
+ _services . TryAddScoped < IResourceIdentifierObjectAdapter , ResourceIdentifierObjectAdapter > ( ) ;
263
+ _services . TryAddScoped < IRelationshipDataAdapter , RelationshipDataAdapter > ( ) ;
264
+ _services . TryAddScoped < IResourceObjectAdapter , ResourceObjectAdapter > ( ) ;
265
+ _services . TryAddScoped < IResourceDataAdapter , ResourceDataAdapter > ( ) ;
266
+ _services . TryAddScoped < IAtomicReferenceAdapter , AtomicReferenceAdapter > ( ) ;
267
+ _services . TryAddScoped < IResourceDataInOperationsRequestAdapter , ResourceDataInOperationsRequestAdapter > ( ) ;
268
+ _services . TryAddScoped < IAtomicOperationObjectAdapter , AtomicOperationObjectAdapter > ( ) ;
269
+ _services . TryAddScoped < IDocumentInResourceOrRelationshipRequestAdapter , DocumentInResourceOrRelationshipRequestAdapter > ( ) ;
270
+ _services . TryAddScoped < IDocumentInOperationsRequestAdapter , DocumentInOperationsRequestAdapter > ( ) ;
271
+ _services . TryAddScoped < IDocumentAdapter , DocumentAdapter > ( ) ;
272
+
273
+ _services . TryAddScoped < ILinkBuilder , LinkBuilder > ( ) ;
274
+ _services . TryAddScoped < IResponseMeta , EmptyResponseMeta > ( ) ;
275
+ _services . TryAddScoped < IMetaBuilder , MetaBuilder > ( ) ;
276
+ _services . TryAddSingleton < IFingerprintGenerator , FingerprintGenerator > ( ) ;
277
+ _services . TryAddSingleton < IETagGenerator , ETagGenerator > ( ) ;
278
+ _services . TryAddScoped < IResponseModelAdapter , ResponseModelAdapter > ( ) ;
279
279
}
280
280
281
281
private void AddOperationsLayer ( )
282
282
{
283
- _services . AddScoped ( typeof ( ICreateProcessor < , > ) , typeof ( CreateProcessor < , > ) ) ;
284
- _services . AddScoped ( typeof ( IUpdateProcessor < , > ) , typeof ( UpdateProcessor < , > ) ) ;
285
- _services . AddScoped ( typeof ( IDeleteProcessor < , > ) , typeof ( DeleteProcessor < , > ) ) ;
286
- _services . AddScoped ( typeof ( IAddToRelationshipProcessor < , > ) , typeof ( AddToRelationshipProcessor < , > ) ) ;
287
- _services . AddScoped ( typeof ( ISetRelationshipProcessor < , > ) , typeof ( SetRelationshipProcessor < , > ) ) ;
288
- _services . AddScoped ( typeof ( IRemoveFromRelationshipProcessor < , > ) , typeof ( RemoveFromRelationshipProcessor < , > ) ) ;
289
-
290
- _services . AddScoped < IOperationsProcessor , OperationsProcessor > ( ) ;
291
- _services . AddScoped < IOperationProcessorAccessor , OperationProcessorAccessor > ( ) ;
292
- _services . AddScoped < ILocalIdTracker , LocalIdTracker > ( ) ;
283
+ _services . TryAddScoped ( typeof ( ICreateProcessor < , > ) , typeof ( CreateProcessor < , > ) ) ;
284
+ _services . TryAddScoped ( typeof ( IUpdateProcessor < , > ) , typeof ( UpdateProcessor < , > ) ) ;
285
+ _services . TryAddScoped ( typeof ( IDeleteProcessor < , > ) , typeof ( DeleteProcessor < , > ) ) ;
286
+ _services . TryAddScoped ( typeof ( IAddToRelationshipProcessor < , > ) , typeof ( AddToRelationshipProcessor < , > ) ) ;
287
+ _services . TryAddScoped ( typeof ( ISetRelationshipProcessor < , > ) , typeof ( SetRelationshipProcessor < , > ) ) ;
288
+ _services . TryAddScoped ( typeof ( IRemoveFromRelationshipProcessor < , > ) , typeof ( RemoveFromRelationshipProcessor < , > ) ) ;
289
+
290
+ _services . TryAddScoped < IOperationsProcessor , OperationsProcessor > ( ) ;
291
+ _services . TryAddScoped < IOperationProcessorAccessor , OperationProcessorAccessor > ( ) ;
292
+ _services . TryAddScoped < ILocalIdTracker , LocalIdTracker > ( ) ;
293
293
}
294
294
295
295
public void Dispose ( )
0 commit comments