Skip to content

Commit b604490

Browse files
committed
Use updated Xer.Cqrs package
1 parent b07b19c commit b604490

File tree

4 files changed

+48
-56
lines changed

4 files changed

+48
-56
lines changed

Src/CqrsBuilder.cs

Lines changed: 39 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,28 @@ internal CqrsBuilder(IServiceCollection serviceCollection)
2424
_serviceCollection = serviceCollection;
2525
}
2626

27+
public ICqrsBuilder AddCommandDelegator()
28+
{
29+
_serviceCollection.AddSingleton<CommandDelegator>(serviceProvider =>
30+
{
31+
CommandHandlerDelegateResolver[] messageHandlerResolvers = serviceProvider.GetServices<CommandHandlerDelegateResolver>().ToArray();
32+
33+
if (messageHandlerResolvers.Length > 1)
34+
{
35+
return new CommandDelegator(CompositeMessageHandlerResolver.Compose(messageHandlerResolvers));
36+
}
37+
else if (messageHandlerResolvers.Length == 1)
38+
{
39+
return new CommandDelegator(messageHandlerResolvers[0]);
40+
}
41+
42+
// Empty delegator.
43+
return new CommandDelegator(new SingleMessageHandlerRegistration().BuildMessageHandlerResolver());
44+
});
45+
46+
return this;
47+
}
48+
2749
public ICqrsBuilder AddCommandHandlers(Assembly assembly, ServiceLifetime lifetime = ServiceLifetime.Transient)
2850
{
2951
return AddCommandHandlers(new[] { assembly }, lifetime);
@@ -59,42 +81,38 @@ public ICqrsBuilder AddCommandHandlersAttributes(IEnumerable<Assembly> assemblie
5981
_serviceCollection.Scan(scan => scan
6082
.FromAssemblies(assemblies)
6183
// Register classes that has a method marked with [CommandHandler]
62-
.AddClasses(classes => classes.Where(type => hasHandlerAttributeMethods<CommandHandlerAttribute>(type)))
84+
.AddClasses(classes => classes.Where(type => CommandHandlerAttributeMethod.IsFoundInType(type)))
6385
.AsSelf()
6486
.WithLifetime(lifetime));
65-
66-
// Get all types that has methods marked with [CommandHandler] attribute.
67-
Type[] allTypes = assemblies.SelectMany(assembly => assembly.GetTypes())
68-
.Where(type => hasHandlerAttributeMethods<CommandHandlerAttribute>(type))
69-
.ToArray();
7087

7188
_serviceCollection.AddSingleton<CommandHandlerDelegateResolver>(serviceProvider =>
7289
{
7390
var singleMessageHandlerRegistration = new SingleMessageHandlerRegistration();
74-
75-
foreach(Type type in allTypes)
76-
{
77-
singleMessageHandlerRegistration.RegisterCommandHandlerAttributes(() => serviceProvider.GetRequiredService(type));
78-
}
91+
singleMessageHandlerRegistration.RegisterCommandHandlerAttributes(assemblies, serviceProvider.GetRequiredService);
7992

8093
return new CommandHandlerDelegateResolver(singleMessageHandlerRegistration.BuildMessageHandlerResolver());
8194
});
8295

8396
return this;
8497
}
8598

86-
public ICqrsBuilder AddCommandDelegator()
99+
public ICqrsBuilder AddEventDelegator()
87100
{
88-
_serviceCollection.AddSingleton<CommandDelegator>(serviceProvider =>
101+
_serviceCollection.AddSingleton<EventDelegator>(serviceProvider =>
89102
{
90-
var messageHandlerResolvers = serviceProvider.GetServices<CommandHandlerDelegateResolver>().ToArray();
91-
92-
if(messageHandlerResolvers.Length == 1)
103+
EventHandlerDelegateResolver[] messageHandlerResolvers = serviceProvider.GetServices<EventHandlerDelegateResolver>().ToArray();
104+
105+
if (messageHandlerResolvers.Length > 1)
93106
{
94-
return new CommandDelegator(messageHandlerResolvers[0]);
107+
return new EventDelegator(CompositeMessageHandlerResolver.Compose(messageHandlerResolvers));
108+
}
109+
else if (messageHandlerResolvers.Length == 1)
110+
{
111+
return new EventDelegator(messageHandlerResolvers[0]);
95112
}
96113

97-
return new CommandDelegator(CompositeMessageHandlerResolver.Compose(messageHandlerResolvers));
114+
// Empty delegator.
115+
return new EventDelegator(new MultiMessageHandlerRegistration().BuildMessageHandlerResolver());
98116
});
99117

100118
return this;
@@ -132,50 +150,19 @@ public ICqrsBuilder AddEventHandlersAttributes(IEnumerable<Assembly> assemblies,
132150
_serviceCollection.Scan(scan => scan
133151
.FromAssemblies(assemblies)
134152
// Register classes that has a method marked with [EventHandler]
135-
.AddClasses(classes => classes.Where(type => hasHandlerAttributeMethods<EventHandlerAttribute>(type)))
153+
.AddClasses(classes => classes.Where(type => EventHandlerAttributeMethod.IsFoundInType(type)))
136154
.AsSelf()
137155
.WithLifetime(lifetime));
138156

139-
// Get all types that has methods marked with [EventHandler] attribute.
140-
Type[] allTypes = assemblies.SelectMany(assembly => assembly.GetTypes())
141-
.Where(type => hasHandlerAttributeMethods<EventHandlerAttribute>(type))
142-
.ToArray();
143-
144157
_serviceCollection.AddSingleton<EventHandlerDelegateResolver>(serviceProvider =>
145158
{
146159
var multiMessageHandlerRegistration = new MultiMessageHandlerRegistration();
147-
148-
foreach(Type type in allTypes)
149-
{
150-
multiMessageHandlerRegistration.RegisterEventHandlerAttributes(() => serviceProvider.GetRequiredService(type));
151-
}
152-
160+
multiMessageHandlerRegistration.RegisterEventHandlerAttributes(assemblies, serviceProvider.GetRequiredService);
161+
153162
return new EventHandlerDelegateResolver(multiMessageHandlerRegistration.BuildMessageHandlerResolver());
154163
});
155164

156165
return this;
157166
}
158-
159-
public ICqrsBuilder AddEventDelegator()
160-
{
161-
_serviceCollection.AddSingleton<EventDelegator>(serviceProvider =>
162-
{
163-
var messageHandlerResolvers = serviceProvider.GetServices<EventHandlerDelegateResolver>().ToArray();
164-
165-
if(messageHandlerResolvers.Length == 1)
166-
{
167-
return new EventDelegator(messageHandlerResolvers[0]);
168-
}
169-
170-
return new EventDelegator(CompositeMessageHandlerResolver.Compose(messageHandlerResolvers));
171-
});
172-
173-
return this;
174-
}
175-
176-
private bool hasHandlerAttributeMethods<TAttribute>(Type type) where TAttribute : Attribute
177-
{
178-
return type.GetMethods().Any(method => method.GetCustomAttributes(typeof(TAttribute), true).Any());
179-
}
180167
}
181168
}

Src/ServiceProviderAdapter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55
namespace Xer.Cqrs.Extensions.Microsoft.DependencyInjection
66
{
7+
/// <summary>
8+
/// Represents an adapter to IServiceProvider.
9+
/// This will request an instance from the provider
10+
/// without throwing an exception if the requested type is not found.
11+
/// </summary>
712
public class ServiceProviderAdapter : CommandStack.Resolvers.IContainerAdapter,
813
EventStack.Resolvers.IContainerAdapter
914
{

Src/Xer.Cqrs.Extensions.Microsoft.DependencyInjection.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<ItemGroup>
88
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="2.0.0" />
99
<PackageReference Include="Scrutor" Version="2.1.2" />
10-
<PackageReference Include="Xer.Cqrs.CommandStack" Version="0.2.1" />
11-
<PackageReference Include="Xer.Cqrs.EventStack" Version="0.2.1" />
10+
<PackageReference Include="Xer.Cqrs.CommandStack" Version="0.2.3" />
11+
<PackageReference Include="Xer.Cqrs.EventStack" Version="0.2.3" />
1212
<PackageReference Include="Xer.Delegator" Version="0.3.0" />
1313
</ItemGroup>
1414

Tests/Xer.Cqrs.Extensions.Microsoft.DependencyInjection.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
<PackageReference Include="FluentAssertions" Version="5.1.1" />
1111
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
1212
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
13-
<PackageReference Include="Xer.Cqrs.CommandStack" Version="0.2.1" />
14-
<PackageReference Include="Xer.Cqrs.EventStack" Version="0.2.1" />
13+
<PackageReference Include="Xer.Cqrs.CommandStack" Version="0.2.3" />
14+
<PackageReference Include="Xer.Cqrs.EventStack" Version="0.2.3" />
1515
<PackageReference Include="Xer.Delegator" Version="0.3.0" />
1616
<PackageReference Include="xunit" Version="2.3.1" />
1717
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />

0 commit comments

Comments
 (0)