diff --git a/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj b/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj index f33af433e7..f1c8b13cad 100644 --- a/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj +++ b/framework/src/Volo.Abp.Uow/Volo.Abp.Uow.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Uow Volo.Abp.Uow $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AlwaysDisableTransactionsUnitOfWorkManager.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AlwaysDisableTransactionsUnitOfWorkManager.cs index a02f63c3e1..462c001e6d 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AlwaysDisableTransactionsUnitOfWorkManager.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AlwaysDisableTransactionsUnitOfWorkManager.cs @@ -12,7 +12,7 @@ public class AlwaysDisableTransactionsUnitOfWorkManager : IUnitOfWorkManager _unitOfWorkManager = unitOfWorkManager; } - public IUnitOfWork Current => _unitOfWorkManager.Current; + public IUnitOfWork? Current => _unitOfWorkManager.Current; public IUnitOfWork Begin(AbpUnitOfWorkOptions options, bool requiresNew = false) { diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs index 183126cb50..dc70dfad46 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/AmbientUnitOfWork.cs @@ -6,21 +6,21 @@ namespace Volo.Abp.Uow; [ExposeServices(typeof(IAmbientUnitOfWork), typeof(IUnitOfWorkAccessor))] public class AmbientUnitOfWork : IAmbientUnitOfWork, ISingletonDependency { - public IUnitOfWork UnitOfWork => _currentUow.Value; + public IUnitOfWork? UnitOfWork => _currentUow.Value; - private readonly AsyncLocal _currentUow; + private readonly AsyncLocal _currentUow; public AmbientUnitOfWork() { - _currentUow = new AsyncLocal(); + _currentUow = new AsyncLocal(); } - public void SetUnitOfWork(IUnitOfWork unitOfWork) + public void SetUnitOfWork(IUnitOfWork? unitOfWork) { _currentUow.Value = unitOfWork; } - public IUnitOfWork GetCurrentByChecking() + public IUnitOfWork? GetCurrentByChecking() { var uow = UnitOfWork; diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs index bf8a44f724..eb51d8c189 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ChildUnitOfWork.cs @@ -10,9 +10,9 @@ internal class ChildUnitOfWork : IUnitOfWork { public Guid Id => _parent.Id; - public IAbpUnitOfWorkOptions Options => _parent.Options; + public IAbpUnitOfWorkOptions? Options => _parent.Options; - public IUnitOfWork Outer => _parent.Outer; + public IUnitOfWork? Outer => _parent.Outer; public bool IsReserved => _parent.IsReserved; @@ -20,10 +20,10 @@ internal class ChildUnitOfWork : IUnitOfWork public bool IsCompleted => _parent.IsCompleted; - public string ReservationName => _parent.ReservationName; + public string? ReservationName => _parent.ReservationName; - public event EventHandler Failed; - public event EventHandler Disposed; + public event EventHandler Failed = default!; + public event EventHandler Disposed = default!; public IServiceProvider ServiceProvider => _parent.ServiceProvider; @@ -37,11 +37,11 @@ internal class ChildUnitOfWork : IUnitOfWork _parent = parent; - _parent.Failed += (sender, args) => { Failed.InvokeSafely(sender, args); }; - _parent.Disposed += (sender, args) => { Disposed.InvokeSafely(sender, args); }; + _parent.Failed += (sender, args) => { Failed.InvokeSafely(sender!, args); }; + _parent.Disposed += (sender, args) => { Disposed.InvokeSafely(sender!, args); }; } - public void SetOuter(IUnitOfWork outer) + public void SetOuter(IUnitOfWork? outer) { _parent.SetOuter(outer); } @@ -78,19 +78,19 @@ internal class ChildUnitOfWork : IUnitOfWork public void AddOrReplaceLocalEvent( UnitOfWorkEventRecord eventRecord, - Predicate replacementSelector = null) + Predicate? replacementSelector = null) { _parent.AddOrReplaceLocalEvent(eventRecord, replacementSelector); } public void AddOrReplaceDistributedEvent( UnitOfWorkEventRecord eventRecord, - Predicate replacementSelector = null) + Predicate? replacementSelector = null) { _parent.AddOrReplaceDistributedEvent(eventRecord, replacementSelector); } - public IDatabaseApi FindDatabaseApi(string key) + public IDatabaseApi? FindDatabaseApi(string key) { return _parent.FindDatabaseApi(key); } @@ -105,7 +105,7 @@ internal class ChildUnitOfWork : IUnitOfWork return _parent.GetOrAddDatabaseApi(key, factory); } - public ITransactionApi FindTransactionApi(string key) + public ITransactionApi? FindTransactionApi(string key) { return _parent.FindTransactionApi(key); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs index e29ed5aa6a..5781da4140 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IAmbientUnitOfWork.cs @@ -2,5 +2,5 @@ public interface IAmbientUnitOfWork : IUnitOfWorkAccessor { - IUnitOfWork GetCurrentByChecking(); + IUnitOfWork? GetCurrentByChecking(); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IDatabaseApiContainer.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IDatabaseApiContainer.cs index 429bd48998..23d3b0f20b 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IDatabaseApiContainer.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IDatabaseApiContainer.cs @@ -6,8 +6,7 @@ namespace Volo.Abp.Uow; public interface IDatabaseApiContainer : IServiceProviderAccessor { - [CanBeNull] - IDatabaseApi FindDatabaseApi([NotNull] string key); + IDatabaseApi? FindDatabaseApi([NotNull] string key); void AddDatabaseApi([NotNull] string key, [NotNull] IDatabaseApi api); diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApiContainer.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApiContainer.cs index f5bdf13ccb..9acce6ce69 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApiContainer.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApiContainer.cs @@ -5,8 +5,7 @@ namespace Volo.Abp.Uow; public interface ITransactionApiContainer { - [CanBeNull] - ITransactionApi FindTransactionApi([NotNull] string key); + ITransactionApi? FindTransactionApi([NotNull] string key); void AddTransactionApi([NotNull] string key, [NotNull] ITransactionApi api); diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs index 200ce937d9..15dc2bdec0 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWork.cs @@ -17,9 +17,9 @@ public interface IUnitOfWork : IDatabaseApiContainer, ITransactionApiContainer, event EventHandler Disposed; - IAbpUnitOfWorkOptions Options { get; } + IAbpUnitOfWorkOptions? Options { get; } - IUnitOfWork Outer { get; } + IUnitOfWork? Outer { get; } bool IsReserved { get; } @@ -27,9 +27,9 @@ public interface IUnitOfWork : IDatabaseApiContainer, ITransactionApiContainer, bool IsCompleted { get; } - string ReservationName { get; } + string? ReservationName { get; } - void SetOuter([CanBeNull] IUnitOfWork outer); + void SetOuter(IUnitOfWork? outer); void Initialize([NotNull] AbpUnitOfWorkOptions options); @@ -45,11 +45,11 @@ public interface IUnitOfWork : IDatabaseApiContainer, ITransactionApiContainer, void AddOrReplaceLocalEvent( UnitOfWorkEventRecord eventRecord, - Predicate replacementSelector = null + Predicate? replacementSelector = null ); void AddOrReplaceDistributedEvent( UnitOfWorkEventRecord eventRecord, - Predicate replacementSelector = null + Predicate? replacementSelector = null ); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkAccessor.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkAccessor.cs index 59fd00ce96..e2333b5bbc 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkAccessor.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkAccessor.cs @@ -4,8 +4,7 @@ namespace Volo.Abp.Uow; public interface IUnitOfWorkAccessor { - [CanBeNull] - IUnitOfWork UnitOfWork { get; } + IUnitOfWork? UnitOfWork { get; } - void SetUnitOfWork([CanBeNull] IUnitOfWork unitOfWork); + void SetUnitOfWork(IUnitOfWork? unitOfWork); } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkManager.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkManager.cs index 34796fe15b..4263dc5778 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkManager.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/IUnitOfWorkManager.cs @@ -4,8 +4,7 @@ namespace Volo.Abp.Uow; public interface IUnitOfWorkManager { - [CanBeNull] - IUnitOfWork Current { get; } + IUnitOfWork? Current { get; } [NotNull] IUnitOfWork Begin([NotNull] AbpUnitOfWorkOptions options, bool requiresNew = false); diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index 626c74478b..b9b39f2f28 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -21,9 +21,9 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency public Guid Id { get; } = Guid.NewGuid(); - public IAbpUnitOfWorkOptions Options { get; private set; } + public IAbpUnitOfWorkOptions? Options { get; private set; } - public IUnitOfWork Outer { get; private set; } + public IUnitOfWork? Outer { get; private set; } public bool IsReserved { get; set; } @@ -31,14 +31,14 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency public bool IsCompleted { get; private set; } - public string ReservationName { get; set; } + public string? ReservationName { get; set; } protected List> CompletedHandlers { get; } = new List>(); protected List DistributedEvents { get; } = new List(); protected List LocalEvents { get; } = new List(); - public event EventHandler Failed; - public event EventHandler Disposed; + public event EventHandler Failed = default!; + public event EventHandler Disposed = default!; public IServiceProvider ServiceProvider { get; } protected IUnitOfWorkEventPublisher UnitOfWorkEventPublisher { get; } @@ -50,7 +50,7 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency private readonly Dictionary _transactionApis; private readonly AbpUnitOfWorkDefaultOptions _defaultOptions; - private Exception _exception; + private Exception? _exception; private bool _isCompleting; private bool _isRolledback; @@ -90,7 +90,7 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency IsReserved = true; } - public virtual void SetOuter(IUnitOfWork outer) + public virtual void SetOuter(IUnitOfWork? outer) { Outer = outer; } @@ -104,9 +104,9 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency foreach (var databaseApi in GetAllActiveDatabaseApis()) { - if (databaseApi is ISupportsSavingChanges) + if (databaseApi is ISupportsSavingChanges supportsSavingChangesDatabaseApi) { - await (databaseApi as ISupportsSavingChanges).SaveChangesAsync(cancellationToken); + await supportsSavingChangesDatabaseApi.SaveChangesAsync(cancellationToken); } } } @@ -181,7 +181,7 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency await RollbackAllAsync(cancellationToken); } - public virtual IDatabaseApi FindDatabaseApi(string key) + public virtual IDatabaseApi? FindDatabaseApi(string key) { return _databaseApis.GetOrDefault(key); } @@ -207,7 +207,7 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency return _databaseApis.GetOrAdd(key, factory); } - public virtual ITransactionApi FindTransactionApi(string key) + public virtual ITransactionApi? FindTransactionApi(string key) { Check.NotNull(key, nameof(key)); @@ -242,14 +242,14 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency public virtual void AddOrReplaceLocalEvent( UnitOfWorkEventRecord eventRecord, - Predicate replacementSelector = null) + Predicate? replacementSelector = null) { AddOrReplaceEvent(LocalEvents, eventRecord, replacementSelector); } public virtual void AddOrReplaceDistributedEvent( UnitOfWorkEventRecord eventRecord, - Predicate replacementSelector = null) + Predicate? replacementSelector = null) { AddOrReplaceEvent(DistributedEvents, eventRecord, replacementSelector); } @@ -257,7 +257,7 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency public virtual void AddOrReplaceEvent( List eventRecords, UnitOfWorkEventRecord eventRecord, - Predicate replacementSelector = null) + Predicate? replacementSelector = null) { if (replacementSelector == null) { @@ -340,11 +340,11 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency { foreach (var databaseApi in GetAllActiveDatabaseApis()) { - if (databaseApi is ISupportsRollback) + if (databaseApi is ISupportsRollback supportsRollbackDatabaseApi) { try { - await (databaseApi as ISupportsRollback).RollbackAsync(cancellationToken); + await supportsRollbackDatabaseApi.RollbackAsync(cancellationToken); } catch { } } @@ -352,11 +352,11 @@ public class UnitOfWork : IUnitOfWork, ITransientDependency foreach (var transactionApi in GetAllActiveTransactionApis()) { - if (transactionApi is ISupportsRollback) + if (transactionApi is ISupportsRollback supportsRollbackTransactionApi) { try { - await (transactionApi as ISupportsRollback).RollbackAsync(cancellationToken); + await supportsRollbackTransactionApi.RollbackAsync(cancellationToken); } catch { } } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs index e8c1d293d7..5867beab13 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkFailedEventArgs.cs @@ -13,8 +13,7 @@ public class UnitOfWorkFailedEventArgs : UnitOfWorkEventArgs /// Can be null if there is no exception, but is not called. /// Can be null if another exception occurred during the UOW. /// - [CanBeNull] - public Exception Exception { get; } + public Exception? Exception { get; } /// /// True, if the unit of work is manually rolled back. @@ -24,7 +23,7 @@ public class UnitOfWorkFailedEventArgs : UnitOfWorkEventArgs /// /// Creates a new object. /// - public UnitOfWorkFailedEventArgs([NotNull] IUnitOfWork unitOfWork, [CanBeNull] Exception exception, bool isRolledback) + public UnitOfWorkFailedEventArgs([NotNull] IUnitOfWork unitOfWork, Exception? exception, bool isRolledback) : base(unitOfWork) { Exception = exception; diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkHelper.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkHelper.cs index 94929a6d1c..3e836a9ed0 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkHelper.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkHelper.cs @@ -23,7 +23,7 @@ public static class UnitOfWorkHelper return false; } - public static bool IsUnitOfWorkMethod([NotNull] MethodInfo methodInfo, [CanBeNull] out UnitOfWorkAttribute unitOfWorkAttribute) + public static bool IsUnitOfWorkMethod([NotNull] MethodInfo methodInfo, out UnitOfWorkAttribute? unitOfWorkAttribute) { Check.NotNull(methodInfo, nameof(methodInfo)); @@ -57,7 +57,7 @@ public static class UnitOfWorkHelper return false; } - public static UnitOfWorkAttribute GetUnitOfWorkAttributeOrNull(MethodInfo methodInfo) + public static UnitOfWorkAttribute? GetUnitOfWorkAttributeOrNull(MethodInfo methodInfo) { var attrs = methodInfo.GetCustomAttributes(true).OfType().ToArray(); if (attrs.Length > 0) @@ -65,12 +65,15 @@ public static class UnitOfWorkHelper return attrs[0]; } - attrs = methodInfo.DeclaringType.GetTypeInfo().GetCustomAttributes(true).OfType().ToArray(); - if (attrs.Length > 0) + if (methodInfo.DeclaringType != null) { - return attrs[0]; + attrs = methodInfo.DeclaringType.GetTypeInfo().GetCustomAttributes(true).OfType().ToArray(); + if (attrs.Length > 0) + { + return attrs[0]; + } } - + return null; } diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs index 130f1d3e7b..d49d131299 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkInterceptor.cs @@ -52,7 +52,7 @@ public class UnitOfWorkInterceptor : AbpInterceptor, ITransientDependency } } - private AbpUnitOfWorkOptions CreateOptions(IServiceProvider serviceProvider, IAbpMethodInvocation invocation, [CanBeNull] UnitOfWorkAttribute unitOfWorkAttribute) + private AbpUnitOfWorkOptions CreateOptions(IServiceProvider serviceProvider, IAbpMethodInvocation invocation, UnitOfWorkAttribute? unitOfWorkAttribute) { var options = new AbpUnitOfWorkOptions(); diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs index 4752f5bdba..970f7030ca 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWorkManager.cs @@ -10,7 +10,7 @@ public class UnitOfWorkManager : IUnitOfWorkManager, ISingletonDependency [Obsolete("This will be removed in next versions.")] public static AsyncLocal DisableObsoleteDbContextCreationWarning { get; } = new AsyncLocal(); - public IUnitOfWork Current => _ambientUnitOfWork.GetCurrentByChecking(); + public IUnitOfWork? Current => _ambientUnitOfWork.GetCurrentByChecking(); private readonly IServiceScopeFactory _serviceScopeFactory; private readonly IAmbientUnitOfWork _ambientUnitOfWork;