Skip to content

Commit 9183267

Browse files
authored
Merge pull request #9 from XerProjects/hotfix/2.0.1
Hotfix 2.0.1: Throw if no assemblies are provided
2 parents 4f9d6d7 + 00fb212 commit 9183267

21 files changed

+416
-341
lines changed

GitVersion.yml

Lines changed: 0 additions & 5 deletions
This file was deleted.

Src/Xer.Cqrs.Extensions.Autofac/ContainerBuilderExtensions.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Reflection;
1+
using System;
2+
using System.Reflection;
23
using Xer.Cqrs.Extensions.Autofac;
34

45
namespace Autofac
@@ -7,6 +8,21 @@ public static class ContainerBuilderExtensions
78
{
89
public static ContainerBuilder RegisterCqrs(this ContainerBuilder builder, params Assembly[] assemblies)
910
{
11+
if (builder == null)
12+
{
13+
throw new ArgumentNullException(nameof(builder));
14+
}
15+
16+
if (assemblies == null)
17+
{
18+
throw new ArgumentNullException(nameof(assemblies));
19+
}
20+
21+
if (assemblies.Length == 0)
22+
{
23+
throw new ArgumentException("No assemblies were provided.", nameof(assemblies));
24+
}
25+
1026
builder.RegisterCqrsCore()
1127
.RegisterEventHandlers(select =>
1228
select.ByInterface(assemblies)
@@ -20,6 +36,11 @@ public static ContainerBuilder RegisterCqrs(this ContainerBuilder builder, param
2036

2137
public static ICqrsBuilder RegisterCqrsCore(this ContainerBuilder builder)
2238
{
39+
if (builder == null)
40+
{
41+
throw new ArgumentNullException(nameof(builder));
42+
}
43+
2344
return new CqrsBuilder(builder);
2445
}
2546
}

Src/Xer.Cqrs.Extensions.Autofac/CqrsBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public ICqrsBuilder RegisterCommandHandlers(Action<ICqrsCommandHandlerSelector>
4646
: new CommandDelegator(handlers[0]);
4747
}
4848

49-
return new CommandDelegator(new SingleMessageHandlerRegistration().BuildMessageHandlerResolver());
49+
return new CommandDelegator(NullMessageHandlerDelegateResolver.Instance);
5050
}).As<CommandDelegator>().SingleInstance();
5151

5252
return this;
@@ -73,7 +73,7 @@ public ICqrsBuilder RegisterEventHandlers(Action<ICqrsEventHandlerSelector> sele
7373
: new EventDelegator(handlers[0]);
7474
}
7575

76-
return new EventDelegator(new MultiMessageHandlerRegistration().BuildMessageHandlerResolver());
76+
return new EventDelegator(NullMessageHandlerDelegateResolver.Instance);
7777
}).As<EventDelegator>().SingleInstance();
7878

7979
return this;

Src/Xer.Cqrs.Extensions.Autofac/CqrsCommandHandlerSelector.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,16 @@ public ICqrsCommandHandlerSelector ByInterface(Lifetime lifetime, params Assembl
3434

3535
if (assemblies.Length == 0)
3636
{
37-
throw new ArgumentException("No assemblies were provided.", nameof(assemblies));
37+
throw new ArgumentException("No command handler assemblies were provided.", nameof(assemblies));
3838
}
39+
40+
Assembly[] distinctAssemblies = assemblies.Distinct().ToArray();
3941

40-
var asyncHandlerRegistration = _builder.RegisterAssemblyTypes(assemblies.ToArray())
42+
var asyncHandlerRegistration = _builder.RegisterAssemblyTypes(distinctAssemblies)
4143
.AsClosedTypesOf(typeof(ICommandAsyncHandler<>))
4244
.AsImplementedInterfaces();
4345

44-
var syncHandlerRegistration = _builder.RegisterAssemblyTypes(assemblies.ToArray())
46+
var syncHandlerRegistration = _builder.RegisterAssemblyTypes(distinctAssemblies)
4547
.AsClosedTypesOf(typeof(ICommandHandler<>))
4648
.AsImplementedInterfaces();
4749

@@ -87,10 +89,12 @@ public ICqrsCommandHandlerSelector ByAttribute(Lifetime lifetime, params Assembl
8789

8890
if (assemblies.Length == 0)
8991
{
90-
throw new ArgumentException("No assemblies were provided.", nameof(assemblies));
92+
throw new ArgumentException("No command handler assemblies were provided.", nameof(assemblies));
9193
}
94+
95+
Assembly[] distinctAssemblies = assemblies.Distinct().ToArray();
9296

93-
var handlerRegistration = _builder.RegisterAssemblyTypes(assemblies.ToArray())
97+
var handlerRegistration = _builder.RegisterAssemblyTypes(distinctAssemblies)
9498
.Where(type => type.IsClass && !type.IsAbstract &&
9599
CommandHandlerAttributeMethod.IsFoundInType(type))
96100
.AsSelf();
@@ -113,7 +117,7 @@ public ICqrsCommandHandlerSelector ByAttribute(Lifetime lifetime, params Assembl
113117
_builder.Register(context =>
114118
{
115119
SingleMessageHandlerRegistration singleMessageHandlerRegistration = new SingleMessageHandlerRegistration();
116-
singleMessageHandlerRegistration.RegisterCommandHandlersByAttribute(assemblies, context.Resolve);
120+
singleMessageHandlerRegistration.RegisterCommandHandlersByAttribute(distinctAssemblies, context.Resolve);
117121
return new CommandHandlerDelegateResolver(singleMessageHandlerRegistration.BuildMessageHandlerResolver());
118122
}).AsSelf().SingleInstance();
119123

Src/Xer.Cqrs.Extensions.Autofac/CqrsEventHandlerSelector.cs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Autofac;
22
using System;
3+
using System.Collections.Generic;
34
using System.Linq;
45
using System.Reflection;
56
using Xer.Cqrs.EventStack;
@@ -34,14 +35,16 @@ public ICqrsEventHandlerSelector ByInterface(Lifetime lifetime, params Assembly[
3435

3536
if (assemblies.Length == 0)
3637
{
37-
throw new ArgumentException("No assemblies were provided.", nameof(assemblies));
38+
throw new ArgumentException("No event handler assemblies were provided.", nameof(assemblies));
3839
}
3940

40-
var asyncHandlerRegistration = _builder.RegisterAssemblyTypes(assemblies.ToArray())
41+
Assembly[] distinctAssemblies = assemblies.Distinct().ToArray();
42+
43+
var asyncHandlerRegistration = _builder.RegisterAssemblyTypes(distinctAssemblies)
4144
.AsClosedTypesOf(typeof(IEventAsyncHandler<>))
4245
.AsImplementedInterfaces();
4346

44-
var syncHandlerRegistration = _builder.RegisterAssemblyTypes(assemblies.ToArray())
47+
var syncHandlerRegistration = _builder.RegisterAssemblyTypes(distinctAssemblies)
4548
.AsClosedTypesOf(typeof(IEventHandler<>))
4649
.AsImplementedInterfaces();
4750

@@ -84,10 +87,12 @@ public ICqrsEventHandlerSelector ByAttribute(Lifetime lifetime, params Assembly[
8487

8588
if (assemblies.Length == 0)
8689
{
87-
throw new ArgumentException("No assemblies were provided.", nameof(assemblies));
90+
throw new ArgumentException("No event handler assemblies were provided.", nameof(assemblies));
8891
}
8992

90-
var attributeHandlerRegistration = _builder.RegisterAssemblyTypes(assemblies.ToArray())
93+
Assembly[] distinctAssemblies = assemblies.Distinct().ToArray();
94+
95+
var attributeHandlerRegistration = _builder.RegisterAssemblyTypes(distinctAssemblies)
9196
.Where(type => type.IsClass && !type.IsAbstract &&
9297
EventHandlerAttributeMethod.IsFoundInType(type))
9398
.AsSelf();
@@ -110,7 +115,7 @@ public ICqrsEventHandlerSelector ByAttribute(Lifetime lifetime, params Assembly[
110115
_builder.Register(context =>
111116
{
112117
var handlerRegistration = new MultiMessageHandlerRegistration();
113-
handlerRegistration.RegisterEventHandlersByAttribute(assemblies, context.Resolve);
118+
handlerRegistration.RegisterEventHandlersByAttribute(distinctAssemblies, context.Resolve);
114119
return new EventHandlerDelegateResolver(handlerRegistration.BuildMessageHandlerResolver());
115120
}).AsSelf().SingleInstance();
116121

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using Xer.Delegator;
3+
4+
namespace Xer.Cqrs.Extensions.Autofac
5+
{
6+
internal class NullMessageHandlerDelegateResolver : IMessageHandlerResolver
7+
{
8+
private static readonly Lazy<NullMessageHandlerDelegateResolver> _singleton = new Lazy<NullMessageHandlerDelegateResolver>(() => new NullMessageHandlerDelegateResolver());
9+
10+
public static readonly NullMessageHandlerDelegateResolver Instance = _singleton.Value;
11+
12+
private NullMessageHandlerDelegateResolver() { }
13+
14+
public MessageHandlerDelegate ResolveMessageHandler(Type messageType) => NullMessageHandlerDelegate.Instance;
15+
}
16+
}

Src/Xer.Cqrs.Extensions.Autofac/Xer.Cqrs.Extensions.Autofac.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5+
<Authors>jeyjeyemem;mvput;xerprojects-contributors;</Authors>
6+
<Description>Autofac container integration for Xer.Cqrs</Description>
7+
<Copyright>Copyright (c) XerProjects contributors</Copyright>
8+
<PackageLicenseUrl>https://github.com/XerProjects/Xer.Cqrs.Extensions.Autofac/blob/dev/LICENSE</PackageLicenseUrl>
9+
<PackageProjectUrl>https://github.com/XerProjects/Xer.Cqrs.Extensions.Autofac</PackageProjectUrl>
10+
<PackageTags>container;ioc;ioc-container;cqrs;extension;autofac</PackageTags>
511
</PropertyGroup>
612

713
<ItemGroup>
@@ -11,7 +17,6 @@
1117
<PackageReference Include="Xer.Cqrs.CommandStack.Extensions.Attributes" Version="1.0.0" />
1218
<PackageReference Include="Xer.Cqrs.EventStack" Version="2.0.0" />
1319
<PackageReference Include="Xer.Cqrs.EventStack.Extensions.Attributes" Version="1.0.0" />
14-
<PackageReference Include="Xer.Delegator" Version="1.0.0" />
1520
</ItemGroup>
1621

1722
</Project>

Tests/Xer.Cqrs.Extensions.Autofac.Tests/CommandHandlerTests.cs

Lines changed: 0 additions & 74 deletions
This file was deleted.

0 commit comments

Comments
 (0)