@@ -32,6 +32,7 @@ public class DefaultResourceService<TResource, TId> :
3232 private readonly ISortService _sortService ;
3333 private readonly IResourceRepository < TResource , TId > _repository ;
3434 private readonly IResourceChangeTracker < TResource > _resourceChangeTracker ;
35+ private readonly IResourceFactory _resourceFactory ;
3536 private readonly ILogger _logger ;
3637 private readonly IResourceHookExecutor _hookExecutor ;
3738 private readonly IIncludeService _includeService ;
@@ -45,6 +46,7 @@ public DefaultResourceService(
4546 IResourceRepository < TResource , TId > repository ,
4647 IResourceContextProvider provider ,
4748 IResourceChangeTracker < TResource > resourceChangeTracker ,
49+ IResourceFactory resourceFactory ,
4850 IResourceHookExecutor hookExecutor = null )
4951 {
5052 _includeService = queryParameters . FirstOrDefault < IIncludeService > ( ) ;
@@ -56,6 +58,7 @@ public DefaultResourceService(
5658 _logger = loggerFactory . CreateLogger < DefaultResourceService < TResource , TId > > ( ) ;
5759 _repository = repository ;
5860 _resourceChangeTracker = resourceChangeTracker ;
61+ _resourceFactory = resourceFactory ;
5962 _hookExecutor = hookExecutor ;
6063 _currentRequestResource = provider . GetResourceContext < TResource > ( ) ;
6164 }
@@ -81,18 +84,28 @@ public virtual async Task DeleteAsync(TId id)
8184 {
8285 _logger . LogTrace ( $ "Entering { nameof ( DeleteAsync ) } ('{ id } ').") ;
8386
84- var entity = TypeHelper . CreateInstance < TResource > ( ) ;
85- entity . Id = id ;
86- if ( ! IsNull ( _hookExecutor , entity ) ) _hookExecutor . BeforeDelete ( AsList ( entity ) , ResourcePipeline . Delete ) ;
87+ if ( ! IsNull ( _hookExecutor ) )
88+ {
89+ var entity = _resourceFactory . CreateInstance < TResource > ( ) ;
90+ entity . Id = id ;
91+
92+ _hookExecutor . BeforeDelete ( AsList ( entity ) , ResourcePipeline . Delete ) ;
93+ }
8794
88- var succeeded = await _repository . DeleteAsync ( entity . Id ) ;
95+ var succeeded = await _repository . DeleteAsync ( id ) ;
8996 if ( ! succeeded )
9097 {
9198 string resourceId = TypeExtensions . GetResourceStringId < TResource , TId > ( id ) ;
9299 throw new ResourceNotFoundException ( resourceId , _currentRequestResource . ResourceName ) ;
93100 }
94101
95- if ( ! IsNull ( _hookExecutor , entity ) ) _hookExecutor . AfterDelete ( AsList ( entity ) , ResourcePipeline . Delete , succeeded ) ;
102+ if ( ! IsNull ( _hookExecutor ) )
103+ {
104+ var entity = _resourceFactory . CreateInstance < TResource > ( ) ;
105+ entity . Id = id ;
106+
107+ _hookExecutor . AfterDelete ( AsList ( entity ) , ResourcePipeline . Delete , succeeded ) ;
108+ }
96109 }
97110
98111 public virtual async Task < IEnumerable < TResource > > GetAsync ( )
@@ -427,8 +440,9 @@ public DefaultResourceService(
427440 IResourceRepository < TResource , int > repository ,
428441 IResourceContextProvider provider ,
429442 IResourceChangeTracker < TResource > resourceChangeTracker ,
443+ IResourceFactory resourceFactory ,
430444 IResourceHookExecutor hookExecutor = null )
431- : base ( queryParameters , options , loggerFactory , repository , provider , resourceChangeTracker , hookExecutor )
445+ : base ( queryParameters , options , loggerFactory , repository , provider , resourceChangeTracker , resourceFactory , hookExecutor )
432446 { }
433447 }
434448}
0 commit comments