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)