diff --git a/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/AspNetCoreCorrelationIdProvider.cs b/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/AspNetCoreCorrelationIdProvider.cs index 7dc608441..acbd5330a 100644 --- a/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/AspNetCoreCorrelationIdProvider.cs +++ b/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/AspNetCoreCorrelationIdProvider.cs @@ -12,7 +12,7 @@ namespace Bing.AspNetCore.Tracing /// AspNetCore 跟踪关联ID提供程序 /// [Dependency(ServiceLifetime.Transient, ReplaceExisting = true)] - public class AspNetCoreCorrelationIdProvider : ICorrelationIdProvider, ITransientDependency + public class AspNetCoreCorrelationIdProvider : ICorrelationIdProvider { /// /// Http上下文访问器 diff --git a/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/BingCorrelationIdMiddleware.cs b/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/BingCorrelationIdMiddleware.cs index 7a01c6ecf..d725902e9 100644 --- a/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/BingCorrelationIdMiddleware.cs +++ b/framework/src/Bing.AspNetCore/Bing/AspNetCore/Tracing/BingCorrelationIdMiddleware.cs @@ -48,6 +48,8 @@ public async Task InvokeAsync(HttpContext context) TraceIdContext.Current ??= new TraceIdContext(correlationId); try { + // TODO: 由于可能存在某个中间件设置了Response导致当前中间件无法设置 + CheckAndSetCorrelationIdOnResponse(context, _options, correlationId); await _next(context); } finally diff --git a/framework/src/Bing.Auditing/Bing/Auditing/CreationAuditedInitializer.cs b/framework/src/Bing.Auditing/Bing/Auditing/CreationAuditedInitializer.cs index 4a0d8c74e..deb8453e1 100644 --- a/framework/src/Bing.Auditing/Bing/Auditing/CreationAuditedInitializer.cs +++ b/framework/src/Bing.Auditing/Bing/Auditing/CreationAuditedInitializer.cs @@ -23,17 +23,24 @@ public sealed class CreationAuditedInitializer /// private readonly string _userName; + /// + /// 操作时间 + /// + private readonly DateTime? _dateTime; + /// /// 初始化一个类型的实例 /// /// 实体 /// 用户标识 /// 用户名称 - private CreationAuditedInitializer(object entity, string userId, string userName) + /// 操作时间 + private CreationAuditedInitializer(object entity, string userId, string userName, DateTime? dateTime) { _entity = entity; _userId = userId; _userName = userName; + _dateTime = dateTime; } /// @@ -42,7 +49,16 @@ private CreationAuditedInitializer(object entity, string userId, string userName /// 实体 /// 用户标识 /// 用户名称 - public static void Init(object entity, string userId, string userName) => new CreationAuditedInitializer(entity, userId, userName).Init(); + public static void Init(object entity, string userId, string userName) => new CreationAuditedInitializer(entity, userId, userName, null).Init(); + + /// + /// 初始化 + /// + /// 实体 + /// 用户标识 + /// 用户名称 + /// 操作时间 + public static void Init(object entity, string userId, string userName, DateTime? dateTime) => new CreationAuditedInitializer(entity, userId, userName,dateTime).Init(); /// /// 初始化 @@ -62,7 +78,7 @@ public void Init() private void InitCreationTime() { if (_entity is IHasCreationTime result) - result.CreationTime = DateTime.Now; + result.CreationTime = _dateTime.HasValue ? _dateTime.SafeValue() : DateTime.Now; } /// diff --git a/framework/src/Bing.Auditing/Bing/Auditing/ModificationAuditedInitializer.cs b/framework/src/Bing.Auditing/Bing/Auditing/ModificationAuditedInitializer.cs index 81fef42a1..439bb4387 100644 --- a/framework/src/Bing.Auditing/Bing/Auditing/ModificationAuditedInitializer.cs +++ b/framework/src/Bing.Auditing/Bing/Auditing/ModificationAuditedInitializer.cs @@ -23,17 +23,24 @@ public sealed class ModificationAuditedInitializer /// private readonly string _userName; + /// + /// 操作时间 + /// + private readonly DateTime? _dateTime; + /// /// 初始化一个类型的实例 /// /// 实体 /// 用户标识 /// 用户名称 - private ModificationAuditedInitializer(object entity, string userId, string userName) + /// 操作时间 + private ModificationAuditedInitializer(object entity, string userId, string userName, DateTime? dateTime) { _entity = entity; _userId = userId; _userName = userName; + _dateTime = dateTime; } /// @@ -42,7 +49,16 @@ private ModificationAuditedInitializer(object entity, string userId, string user /// 实体 /// 用户标识 /// 用户名称 - public static void Init(object entity, string userId, string userName) => new ModificationAuditedInitializer(entity, userId, userName).Init(); + public static void Init(object entity, string userId, string userName) => new ModificationAuditedInitializer(entity, userId, userName, null).Init(); + + /// + /// 初始化 + /// + /// 实体 + /// 用户标识 + /// 用户名称 + /// 操作时间 + public static void Init(object entity, string userId, string userName, DateTime? dateTime) => new ModificationAuditedInitializer(entity, userId, userName, dateTime).Init(); /// /// 初始化 @@ -62,7 +78,7 @@ public void Init() private void InitLastModificationTime() { if (_entity is IHasModificationTime result) - result.LastModificationTime = DateTime.Now; + result.LastModificationTime = _dateTime.HasValue ? _dateTime.SafeValue() : DateTime.Now; } /// diff --git a/framework/src/Bing/Bing/Core/Modularity/DependsOnModuleAttribute.cs b/framework/src/Bing/Bing/Core/Modularity/DependsOnModuleAttribute.cs index 9e3fe76a8..1968bbf1b 100644 --- a/framework/src/Bing/Bing/Core/Modularity/DependsOnModuleAttribute.cs +++ b/framework/src/Bing/Bing/Core/Modularity/DependsOnModuleAttribute.cs @@ -17,6 +17,6 @@ public class DependsOnModuleAttribute : Attribute /// 初始化一个类型的实例 /// /// 依赖模块类型集合 - public DependsOnModuleAttribute(params Type[] dependedModuleTypes) => DependedModuleTypes = dependedModuleTypes; + public DependsOnModuleAttribute(params Type[] dependedModuleTypes) => DependedModuleTypes = dependedModuleTypes ?? new Type[0]; } } diff --git a/framework/src/Bing/Bing/DependencyInjection/DependencyModule.cs b/framework/src/Bing/Bing/DependencyInjection/DependencyModule.cs index f8ed6dfbe..c0c225d48 100644 --- a/framework/src/Bing/Bing/DependencyInjection/DependencyModule.cs +++ b/framework/src/Bing/Bing/DependencyInjection/DependencyModule.cs @@ -65,9 +65,11 @@ protected virtual void AddToServices(IServiceCollection services, Type implement { if (implementationType.IsAbstract || implementationType.IsInterface) return; + var lifetime = GetLifetimeOrNull(implementationType); if (lifetime == null) return; + var dependencyAttribute = implementationType.GetAttribute(); var serviceTypes = GetImplementedInterfaces(implementationType); diff --git a/framework/src/Bing/Bing/DependencyInjection/DependencyTypeFinder.cs b/framework/src/Bing/Bing/DependencyInjection/DependencyTypeFinder.cs index c33fba28d..bbef65401 100644 --- a/framework/src/Bing/Bing/DependencyInjection/DependencyTypeFinder.cs +++ b/framework/src/Bing/Bing/DependencyInjection/DependencyTypeFinder.cs @@ -27,12 +27,14 @@ public class DependencyTypeFinder : FinderBase, IDependencyTypeFinder /// protected override Type[] FindAllItems() { - var baseTypes = new[] - {typeof(ISingletonDependency), typeof(IScopedDependency), typeof(ITransientDependency)}; - var types = _allAssemblyFinder.FindAll(true).SelectMany(assembly => assembly.GetTypes().Where(type => - type.IsClass && !type.IsAbstract && !type.IsInterface && - !type.HasAttribute() && - (baseTypes.Any(b => b.IsAssignableFrom(type)) || type.HasAttribute()))).ToArray(); + var baseTypes = new[] {typeof(ISingletonDependency), typeof(IScopedDependency), typeof(ITransientDependency)}; + var types = _allAssemblyFinder.FindAll(true) + .SelectMany(assembly => assembly + .GetTypes() + .Where(type => type.IsClass && !type.IsAbstract && !type.IsInterface + && !type.HasAttribute() + && (baseTypes.Any(b => b.IsAssignableFrom(type)) || type.HasAttribute()))) + .ToArray(); return types; } } diff --git a/framework/src/Bing/Bing/Tracing/DefaultCorrelationIdProvider.cs b/framework/src/Bing/Bing/Tracing/DefaultCorrelationIdProvider.cs index 0cc629e75..8f6d391a7 100644 --- a/framework/src/Bing/Bing/Tracing/DefaultCorrelationIdProvider.cs +++ b/framework/src/Bing/Bing/Tracing/DefaultCorrelationIdProvider.cs @@ -1,12 +1,14 @@ using System; using Bing.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; namespace Bing.Tracing { /// /// 默认跟踪标识提供程序 /// - internal class DefaultCorrelationIdProvider : ICorrelationIdProvider, ISingletonDependency + [Dependency(ServiceLifetime.Singleton, TryAdd = true)] + public class DefaultCorrelationIdProvider : ICorrelationIdProvider { /// /// 跟踪标识提供程序 diff --git a/version.props b/version.props index 0bd23ab35..b55fbcce9 100644 --- a/version.props +++ b/version.props @@ -2,7 +2,7 @@ 2 2 - 0 + 1 20220104-1 $(VersionMajor).$(VersionMinor).$(VersionPatch)