Skip to content

Commit f905c9d

Browse files
authored
Merge pull request #2 from XerProjects/feature-refactor
Refactor to match other IoC extension's API
2 parents b604490 + 4b41dd9 commit f905c9d

20 files changed

+363
-253
lines changed

Src/CqrsBuilder.cs

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

Src/ICqrsBuilder.cs

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

Src/ServiceCollectionExtensions.cs

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

Src/CommandHandlerDelegateResolver.cs renamed to Src/Xer.Cqrs.Extensions.Microsoft.DependencyInjection/CommandHandlerDelegateResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ internal class CommandHandlerDelegateResolver : IMessageHandlerResolver
77
{
88
private readonly IMessageHandlerResolver _messageHandlerResolver;
99

10-
public CommandHandlerDelegateResolver(IMessageHandlerResolver messageHandlerResolver)
10+
internal CommandHandlerDelegateResolver(IMessageHandlerResolver messageHandlerResolver)
1111
{
1212
_messageHandlerResolver = messageHandlerResolver;
1313
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
using System;
2+
using System.Linq;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using Xer.Cqrs.CommandStack;
5+
using Xer.Cqrs.EventStack;
6+
using Xer.Delegator.Registrations;
7+
using Xer.Delegator.Resolvers;
8+
9+
namespace Xer.Cqrs.Extensions.Microsoft.DependencyInjection
10+
{
11+
internal class CqrsBuilder : ICqrsBuilder
12+
{
13+
private readonly IServiceCollection _serviceCollection;
14+
private readonly CqrsCommandHandlerSelector _commandHandlerSelector;
15+
private readonly CqrsEventHandlerSelector _eventHandlerSelector;
16+
17+
internal CqrsBuilder(IServiceCollection serviceCollection)
18+
{
19+
_serviceCollection = serviceCollection;
20+
_commandHandlerSelector = new CqrsCommandHandlerSelector(serviceCollection);
21+
_eventHandlerSelector = new CqrsEventHandlerSelector(serviceCollection);
22+
}
23+
24+
public ICqrsBuilder AddCommandHandlers(Action<ICqrsCommandHandlerSelector> selector)
25+
{
26+
if (selector == null)
27+
{
28+
throw new ArgumentNullException(nameof(selector));
29+
}
30+
31+
selector(_commandHandlerSelector);
32+
33+
_serviceCollection.AddSingleton<CommandDelegator>(serviceProvider =>
34+
{
35+
CommandHandlerDelegateResolver[] messageHandlerResolvers = serviceProvider.GetServices<CommandHandlerDelegateResolver>().ToArray();
36+
37+
if (messageHandlerResolvers.Length == 1)
38+
{
39+
return new CommandDelegator(messageHandlerResolvers[0]);
40+
}
41+
else if (messageHandlerResolvers.Length > 1)
42+
{
43+
return new CommandDelegator(CompositeMessageHandlerResolver.Compose(messageHandlerResolvers));
44+
}
45+
46+
// Empty delegator.
47+
return new CommandDelegator(new SingleMessageHandlerRegistration().BuildMessageHandlerResolver());
48+
});
49+
50+
return this;
51+
}
52+
53+
public ICqrsBuilder AddEventHandlers(Action<ICqrsEventHandlerSelector> selector)
54+
{
55+
if (selector == null)
56+
{
57+
throw new ArgumentNullException(nameof(selector));
58+
}
59+
60+
selector(_eventHandlerSelector);
61+
62+
_serviceCollection.AddSingleton<EventDelegator>(serviceProvider =>
63+
{
64+
EventHandlerDelegateResolver[] messageHandlerResolvers = serviceProvider.GetServices<EventHandlerDelegateResolver>().ToArray();
65+
66+
if (messageHandlerResolvers.Length == 1)
67+
{
68+
return new EventDelegator(messageHandlerResolvers[0]);
69+
}
70+
else if (messageHandlerResolvers.Length > 1)
71+
{
72+
return new EventDelegator(CompositeMessageHandlerResolver.Compose(messageHandlerResolvers));
73+
}
74+
75+
// Empty delegator.
76+
return new EventDelegator(new MultiMessageHandlerRegistration().BuildMessageHandlerResolver());
77+
});
78+
79+
return this;
80+
}
81+
}
82+
}

0 commit comments

Comments
 (0)