diff --git a/GFramework.Core.Tests/Ioc/MicrosoftDiContainerTests.cs b/GFramework.Core.Tests/Ioc/MicrosoftDiContainerTests.cs
index 4e3b5b23..19c59dcb 100644
--- a/GFramework.Core.Tests/Ioc/MicrosoftDiContainerTests.cs
+++ b/GFramework.Core.Tests/Ioc/MicrosoftDiContainerTests.cs
@@ -401,6 +401,17 @@ public class MicrosoftDiContainerTests
Is.True);
}
+ ///
+ /// 测试当程序集集合中包含空元素时,CQRS handler 注册入口会在委托给注册服务前直接失败。
+ ///
+ [Test]
+ public void RegisterCqrsHandlersFromAssemblies_WithNullAssemblyItem_Should_ThrowArgumentNullException()
+ {
+ var assemblies = new Assembly[] { typeof(DeterministicOrderNotification).Assembly, null! };
+
+ Assert.Throws(() => _container.RegisterCqrsHandlersFromAssemblies(assemblies));
+ }
+
///
/// 测试冻结容器以防止进一步注册的功能
///
diff --git a/GFramework.Core/Ioc/MicrosoftDiContainer.cs b/GFramework.Core/Ioc/MicrosoftDiContainer.cs
index 5c49621a..6152366f 100644
--- a/GFramework.Core/Ioc/MicrosoftDiContainer.cs
+++ b/GFramework.Core/Ioc/MicrosoftDiContainer.cs
@@ -399,16 +399,22 @@ public class MicrosoftDiContainer(IServiceCollection? serviceCollection = null)
///
/// 要接入的程序集集合。
/// 为 。
+ /// 中存在 元素。
/// 容器已冻结,无法继续注册 CQRS 处理器。
public void RegisterCqrsHandlersFromAssemblies(IEnumerable assemblies)
{
ArgumentNullException.ThrowIfNull(assemblies);
+ var assemblyArray = assemblies.ToArray();
+ foreach (var assembly in assemblyArray)
+ {
+ ArgumentNullException.ThrowIfNull(assembly);
+ }
_lock.EnterWriteLock();
try
{
ThrowIfFrozen();
- ResolveCqrsRegistrationService().RegisterHandlers(assemblies);
+ ResolveCqrsRegistrationService().RegisterHandlers(assemblyArray);
}
finally
{