Skip to content

Commit b3897a3

Browse files
authored
Merge pull request #5 from XerProjects/hotfix/2.0.1
Hotfix/2.0.1
2 parents c22fce3 + 9c5ff4e commit b3897a3

File tree

10 files changed

+137
-171
lines changed

10 files changed

+137
-171
lines changed

GitVersion.yml

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

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2018 XerProjects
3+
Copyright (c) 2018 Joel Jeremy Marquez
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public ICqrsBuilder RegisterCommandHandlers(Action<ICqrsCommandHandlerSelector>
5050
return new CommandDelegator(CompositeMessageHandlerResolver.Compose(resolverArray));
5151
}
5252

53-
return new CommandDelegator(new SingleMessageHandlerRegistration().BuildMessageHandlerResolver());
53+
return new CommandDelegator(NullMessageHandlerDelegateResolver.Instance);
5454
});
5555

5656
return this;
@@ -79,7 +79,7 @@ public ICqrsBuilder RegisterEventHandlers(Action<ICqrsEventHandlerSelector> sele
7979
return new EventDelegator(CompositeMessageHandlerResolver.Compose(resolverArray));
8080
}
8181

82-
return new EventDelegator(new SingleMessageHandlerRegistration().BuildMessageHandlerResolver());
82+
return new EventDelegator(NullMessageHandlerDelegateResolver.Instance);
8383
});
8484

8585
return this;

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public ICqrsCommandHandlerSelector ByInterface(Lifestyle lifeStyle, params Assem
3939

4040
if (assemblies.Length == 0)
4141
{
42-
throw new ArgumentException("No assemblies were provided.", nameof(assemblies));
42+
throw new ArgumentException("No command handler assemblies were provided.", nameof(assemblies));
4343
}
4444

4545
IEnumerable<Assembly> distinctAssemblies = assemblies.Distinct();
@@ -82,25 +82,30 @@ public ICqrsCommandHandlerSelector ByAttribute(Lifestyle lifeStyle, params Assem
8282

8383
if (assemblies.Length == 0)
8484
{
85-
throw new ArgumentException("No assemblies were provided.", nameof(assemblies));
85+
throw new ArgumentException("No command handler assemblies were provided.", nameof(assemblies));
8686
}
8787

8888
// Get all types that has methods marked with [CommandHandler] attribute from distinct assemblies.
89-
IEnumerable<Type> allTypes = assemblies.Distinct()
90-
.SelectMany(assembly => assembly.GetTypes())
91-
.Where(type => type.IsClass &&
92-
!type.IsAbstract &&
93-
CommandHandlerAttributeMethod.IsFoundInType(type))
94-
.ToArray();
95-
96-
foreach (Type type in allTypes)
89+
IEnumerable<Type> foundTypes = assemblies.Distinct()
90+
.SelectMany(assembly => assembly.GetTypes())
91+
.Where(type => type.IsClass &&
92+
!type.IsAbstract &&
93+
CommandHandlerAttributeMethod.IsFoundInType(type))
94+
.ToArray();
95+
96+
if (!foundTypes.Any())
97+
{
98+
return this;
99+
}
100+
101+
foreach (Type type in foundTypes)
97102
{
98103
// Register type as self.
99104
_container.Register(type, type, lifeStyle);
100105
}
101106

102107
var singleMessageHandlerRegistration = new SingleMessageHandlerRegistration();
103-
singleMessageHandlerRegistration.RegisterCommandHandlersByAttribute(allTypes, _container.GetInstance);
108+
singleMessageHandlerRegistration.RegisterCommandHandlersByAttribute(foundTypes, _container.GetInstance);
104109

105110
// Register resolver.
106111
_container.Collections.AppendTo(

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

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ public ICqrsEventHandlerSelector ByInterface(Lifestyle lifeStyle, params Assembl
3636
throw new ArgumentNullException(nameof(assemblies));
3737
}
3838

39+
if (assemblies.Length == 0)
40+
{
41+
throw new ArgumentException("No event handler assemblies were provided.", nameof(assemblies));
42+
}
43+
3944
IEnumerable<Assembly> distinctAssemblies = assemblies.Distinct();
4045

4146
_container.Register(typeof(IEventAsyncHandler<>), distinctAssemblies, lifeStyle);
@@ -69,23 +74,33 @@ public ICqrsEventHandlerSelector ByAttribute(Lifestyle lifeStyle, params Assembl
6974
{
7075
throw new ArgumentNullException(nameof(assemblies));
7176
}
77+
78+
if (assemblies.Length == 0)
79+
{
80+
throw new ArgumentException("No event handler assemblies were provided.", nameof(assemblies));
81+
}
7282

7383
// Get all types that has methods marked with [EventHandler] attribute from distinct assemblies.
74-
IEnumerable<Type> allTypes = assemblies.Distinct()
75-
.SelectMany(assembly => assembly.GetTypes())
76-
.Where(type => type.IsClass &&
77-
!type.IsAbstract &&
78-
EventHandlerAttributeMethod.IsFoundInType(type))
79-
.ToArray();
80-
81-
foreach (Type type in allTypes)
84+
IEnumerable<Type> foundTypes = assemblies.Distinct()
85+
.SelectMany(assembly => assembly.GetTypes())
86+
.Where(type => type.IsClass &&
87+
!type.IsAbstract &&
88+
EventHandlerAttributeMethod.IsFoundInType(type))
89+
.ToArray();
90+
91+
if (!foundTypes.Any())
92+
{
93+
return this;
94+
}
95+
96+
foreach (Type type in foundTypes)
8297
{
8398
// Register type as self.
8499
_container.Register(type, type, lifeStyle);
85100
}
86101

87102
var multiMessageHandlerRegistration = new MultiMessageHandlerRegistration();
88-
multiMessageHandlerRegistration.RegisterEventHandlersByAttribute(allTypes, _container.GetInstance);
103+
multiMessageHandlerRegistration.RegisterEventHandlersByAttribute(foundTypes, _container.GetInstance);
89104

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

Src/Xer.Cqrs.Extensions.SimpleInjector/SimpleInjectorContainerAdapter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class SimpleInjectorContainerAdapter : CommandStack.Resolvers.IContainerA
1717
public SimpleInjectorContainerAdapter(Container container)
1818
{
1919
// Cast to IServiceProvider so that container will not throw if type is not registered.
20+
// This is done so that when used in CompositeMessageHandlerResolver, container will not throw.
2021
_serviceProvider = container;
2122
}
2223

Src/Xer.Cqrs.Extensions.SimpleInjector/SimpleInjectorContainerExtensions.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ public static class SimpleInjectorContainerExtensions
88
{
99
public static Container RegisterCqrs(this Container container, params Assembly[] assemblies)
1010
{
11+
if (container == null)
12+
{
13+
throw new ArgumentNullException(nameof(container));
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+
1126
RegisterCqrsCore(container)
1227
.RegisterCommandHandlers(select =>
1328
select.ByInterface(assemblies)

appveyor.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
version: '{build}'
2+
pull_requests:
3+
do_not_increment_build_number: true
4+
image: Visual Studio 2017
5+
nuget:
6+
disable_publish_on_pr: true
7+
build_script:
8+
- ps: .\build.ps1
9+
test: off
10+
artifacts:
11+
- path: .\BuildArtifacts\*.nupkg
12+
name: NuGet
13+
skip_commits:
14+
message: /^\[nobuild\](.*)?/ # Skip build if commit message starts with [nobuild]
15+
deploy:
16+
- provider: NuGet
17+
server: https://www.myget.org/F/xerprojects-ci/api/v2/package
18+
api_key:
19+
secure: u04sQwcw2Dg6ymwifBf1PoYRwo6HrQOsEagB7IQYvwRPt+10tyFcrbuKq7Az34Oz
20+
skip_symbols: true
21+
on:
22+
branch: /(^dev$|^master$|^release[-/](.*)|^hotfix[-/](.*))/ # Branches: dev, master, release-*, release/*, hotfix-*, hotfix/*
23+
- provider: NuGet
24+
name: production
25+
skip_symbols: true
26+
api_key:
27+
secure: 1fEVy/0Jgny/LKUOQC75fofhRjEfpAaVV0Y8u3nH+oKdmrPFFFEF1swA+iS0W0rV
28+
on:
29+
branch: master
30+
appveyor_repo_tag: true # Only deploy to NuGet if a tag is found.

0 commit comments

Comments
 (0)