@@ -89,7 +89,7 @@ public void ConfigureResourceGraph(ICollection<Type> dbContextTypes, Action<Reso
8989
9090 _options . SerializerOptions . Converters . Add ( new ResourceObjectConverter ( resourceGraph ) ) ;
9191
92- _services . AddSingleton ( resourceGraph ) ;
92+ _services . TryAddSingleton ( resourceGraph ) ;
9393 }
9494
9595 /// <summary>
@@ -109,7 +109,7 @@ public void ConfigureMvc()
109109 if ( _options . ValidateModelState )
110110 {
111111 _mvcBuilder . AddDataAnnotations ( ) ;
112- _services . AddSingleton < IModelMetadataProvider , JsonApiModelMetadataProvider > ( ) ;
112+ _services . Replace ( new ServiceDescriptor ( typeof ( IModelMetadataProvider ) , typeof ( JsonApiModelMetadataProvider ) , ServiceLifetime . Singleton ) ) ;
113113 }
114114 }
115115
@@ -130,19 +130,19 @@ public void ConfigureServiceContainer(ICollection<Type> dbContextTypes)
130130
131131 if ( dbContextTypes . Any ( ) )
132132 {
133- _services . AddScoped ( typeof ( DbContextResolver < > ) ) ;
133+ _services . TryAddScoped ( typeof ( DbContextResolver < > ) ) ;
134134
135135 foreach ( Type dbContextType in dbContextTypes )
136136 {
137137 Type dbContextResolverClosedType = typeof ( DbContextResolver < > ) . MakeGenericType ( dbContextType ) ;
138- _services . AddScoped ( typeof ( IDbContextResolver ) , dbContextResolverClosedType ) ;
138+ _services . TryAddScoped ( typeof ( IDbContextResolver ) , dbContextResolverClosedType ) ;
139139 }
140140
141- _services . AddScoped < IOperationsTransactionFactory , EntityFrameworkCoreTransactionFactory > ( ) ;
141+ _services . TryAddScoped < IOperationsTransactionFactory , EntityFrameworkCoreTransactionFactory > ( ) ;
142142 }
143143 else
144144 {
145- _services . AddScoped < IOperationsTransactionFactory , MissingTransactionFactory > ( ) ;
145+ _services . TryAddScoped < IOperationsTransactionFactory , MissingTransactionFactory > ( ) ;
146146 }
147147
148148 AddResourceLayer ( ) ;
@@ -153,46 +153,46 @@ public void ConfigureServiceContainer(ICollection<Type> dbContextTypes)
153153 AddQueryStringLayer ( ) ;
154154 AddOperationsLayer ( ) ;
155155
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 > ( ) ;
162162 }
163163
164164 private void AddMiddlewareLayer ( )
165165 {
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 > ( ) ;
181181 }
182182
183183 private void AddResourceLayer ( )
184184 {
185185 RegisterImplementationForInterfaces ( ServiceDiscoveryFacade . ResourceDefinitionUnboundInterfaces , typeof ( JsonApiResourceDefinition < , > ) ) ;
186186
187- _services . AddScoped < IResourceDefinitionAccessor , ResourceDefinitionAccessor > ( ) ;
188- _services . AddScoped < IResourceFactory , ResourceFactory > ( ) ;
187+ _services . TryAddScoped < IResourceDefinitionAccessor , ResourceDefinitionAccessor > ( ) ;
188+ _services . TryAddScoped < IResourceFactory , ResourceFactory > ( ) ;
189189 }
190190
191191 private void AddRepositoryLayer ( )
192192 {
193193 RegisterImplementationForInterfaces ( ServiceDiscoveryFacade . RepositoryUnboundInterfaces , typeof ( EntityFrameworkCoreRepository < , > ) ) ;
194194
195- _services . AddScoped < IResourceRepositoryAccessor , ResourceRepositoryAccessor > ( ) ;
195+ _services . TryAddScoped < IResourceRepositoryAccessor , ResourceRepositoryAccessor > ( ) ;
196196
197197 _services . TryAddTransient < IQueryableBuilder , QueryableBuilder > ( ) ;
198198 _services . TryAddTransient < IIncludeClauseBuilder , IncludeClauseBuilder > ( ) ;
@@ -225,12 +225,12 @@ private void AddQueryStringLayer()
225225 _services . TryAddTransient < ISparseFieldSetParser , SparseFieldSetParser > ( ) ;
226226 _services . TryAddTransient < IPaginationParser , PaginationParser > ( ) ;
227227
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 > ( ) ;
234234
235235 RegisterDependentService < IQueryStringParameterReader , IIncludeQueryStringParameterReader > ( ) ;
236236 RegisterDependentService < IQueryStringParameterReader , IFilterQueryStringParameterReader > ( ) ;
@@ -246,50 +246,50 @@ private void AddQueryStringLayer()
246246 RegisterDependentService < IQueryConstraintProvider , IPaginationQueryStringParameterReader > ( ) ;
247247 RegisterDependentService < IQueryConstraintProvider , IResourceDefinitionQueryableParameterReader > ( ) ;
248248
249- _services . AddScoped < IQueryStringReader , QueryStringReader > ( ) ;
250- _services . AddSingleton < IRequestQueryStringAccessor , RequestQueryStringAccessor > ( ) ;
249+ _services . TryAddScoped < IQueryStringReader , QueryStringReader > ( ) ;
250+ _services . TryAddSingleton < IRequestQueryStringAccessor , RequestQueryStringAccessor > ( ) ;
251251 }
252252
253253 private void RegisterDependentService < TCollectionElement , TElementToAdd > ( )
254254 where TCollectionElement : class
255255 where TElementToAdd : TCollectionElement
256256 {
257- _services . AddScoped < TCollectionElement > ( serviceProvider => serviceProvider . GetRequiredService < TElementToAdd > ( ) ) ;
257+ _services . AddScoped < TCollectionElement > ( provider => provider . GetRequiredService < TElementToAdd > ( ) ) ;
258258 }
259259
260260 private void AddSerializationLayer ( )
261261 {
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 > ( ) ;
279279 }
280280
281281 private void AddOperationsLayer ( )
282282 {
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 > ( ) ;
293293 }
294294
295295 public void Dispose ( )
0 commit comments