Skip to content

Commit eab48cf

Browse files
committed
Separated EventStack from Xer.Cqrs
1 parent 4d801b2 commit eab48cf

23 files changed

+2119
-0
lines changed

.gitignore

+268
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
4+
# User-specific files
5+
*.suo
6+
*.user
7+
*.userosscache
8+
*.sln.docstates
9+
10+
# User-specific files (MonoDevelop/Xamarin Studio)
11+
*.userprefs
12+
13+
# Build results
14+
[Dd]ebug/
15+
[Dd]ebugPublic/
16+
[Rr]elease/
17+
[Rr]eleases/
18+
x64/
19+
x86/
20+
bld/
21+
[Bb]in/
22+
[Oo]bj/
23+
[Ll]og/
24+
25+
# Visual Studio 2015 cache/options directory
26+
.vs/
27+
# Uncomment if you have tasks that create the project's static files in wwwroot
28+
#wwwroot/
29+
30+
# MSTest test Results
31+
[Tt]est[Rr]esult*/
32+
[Bb]uild[Ll]og.*
33+
34+
# NUNIT
35+
*.VisualState.xml
36+
TestResult.xml
37+
38+
# Build Results of an ATL Project
39+
[Dd]ebugPS/
40+
[Rr]eleasePS/
41+
dlldata.c
42+
43+
# DNX
44+
project.lock.json
45+
project.fragment.lock.json
46+
artifacts/
47+
48+
*_i.c
49+
*_p.c
50+
*_i.h
51+
*.ilk
52+
*.meta
53+
*.obj
54+
*.pch
55+
*.pdb
56+
*.pgc
57+
*.pgd
58+
*.rsp
59+
*.sbr
60+
*.tlb
61+
*.tli
62+
*.tlh
63+
*.tmp
64+
*.tmp_proj
65+
*.log
66+
*.vspscc
67+
*.vssscc
68+
.builds
69+
*.pidb
70+
*.svclog
71+
*.scc
72+
73+
# Chutzpah Test files
74+
_Chutzpah*
75+
76+
# Visual C++ cache files
77+
ipch/
78+
*.aps
79+
*.ncb
80+
*.opendb
81+
*.opensdf
82+
*.sdf
83+
*.cachefile
84+
*.VC.db
85+
*.VC.VC.opendb
86+
87+
# Visual Studio profiler
88+
*.psess
89+
*.vsp
90+
*.vspx
91+
*.sap
92+
93+
# TFS 2012 Local Workspace
94+
$tf/
95+
96+
# Guidance Automation Toolkit
97+
*.gpState
98+
99+
# ReSharper is a .NET coding add-in
100+
_ReSharper*/
101+
*.[Rr]e[Ss]harper
102+
*.DotSettings.user
103+
104+
# JustCode is a .NET coding add-in
105+
.JustCode
106+
107+
# TeamCity is a build add-in
108+
_TeamCity*
109+
110+
# DotCover is a Code Coverage Tool
111+
*.dotCover
112+
113+
# NCrunch
114+
_NCrunch_*
115+
.*crunch*.local.xml
116+
nCrunchTemp_*
117+
118+
# MightyMoose
119+
*.mm.*
120+
AutoTest.Net/
121+
122+
# Web workbench (sass)
123+
.sass-cache/
124+
125+
# Installshield output folder
126+
[Ee]xpress/
127+
128+
# DocProject is a documentation generator add-in
129+
DocProject/buildhelp/
130+
DocProject/Help/*.HxT
131+
DocProject/Help/*.HxC
132+
DocProject/Help/*.hhc
133+
DocProject/Help/*.hhk
134+
DocProject/Help/*.hhp
135+
DocProject/Help/Html2
136+
DocProject/Help/html
137+
138+
# Click-Once directory
139+
publish/
140+
141+
# Publish Web Output
142+
*.[Pp]ublish.xml
143+
*.azurePubxml
144+
# TODO: Comment the next line if you want to checkin your web deploy settings
145+
# but database connection strings (with potential passwords) will be unencrypted
146+
#*.pubxml
147+
*.publishproj
148+
149+
# Microsoft Azure Web App publish settings. Comment the next line if you want to
150+
# checkin your Azure Web App publish settings, but sensitive information contained
151+
# in these scripts will be unencrypted
152+
PublishScripts/
153+
154+
# NuGet Packages
155+
*.nupkg
156+
# The packages folder can be ignored because of Package Restore
157+
**/packages/*
158+
# except build/, which is used as an MSBuild target.
159+
!**/packages/build/
160+
# Uncomment if necessary however generally it will be regenerated when needed
161+
#!**/packages/repositories.config
162+
# NuGet v3's project.json files produces more ignoreable files
163+
*.nuget.props
164+
*.nuget.targets
165+
166+
# Microsoft Azure Build Output
167+
csx/
168+
*.build.csdef
169+
170+
# Microsoft Azure Emulator
171+
ecf/
172+
rcf/
173+
174+
# Windows Store app package directories and files
175+
AppPackages/
176+
BundleArtifacts/
177+
Package.StoreAssociation.xml
178+
_pkginfo.txt
179+
180+
# Visual Studio cache files
181+
# files ending in .cache can be ignored
182+
*.[Cc]ache
183+
# but keep track of directories ending in .cache
184+
!*.[Cc]ache/
185+
186+
# Others
187+
ClientBin/
188+
~$*
189+
*~
190+
*.dbmdl
191+
*.dbproj.schemaview
192+
*.jfm
193+
*.pfx
194+
*.publishsettings
195+
node_modules/
196+
orleans.codegen.cs
197+
198+
# Since there are multiple workflows, uncomment next line to ignore bower_components
199+
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
200+
#bower_components/
201+
202+
# RIA/Silverlight projects
203+
Generated_Code/
204+
205+
# Backup & report files from converting an old project file
206+
# to a newer Visual Studio version. Backup files are not needed,
207+
# because we have git ;-)
208+
_UpgradeReport_Files/
209+
Backup*/
210+
UpgradeLog*.XML
211+
UpgradeLog*.htm
212+
213+
# SQL Server files
214+
*.mdf
215+
*.ldf
216+
217+
# Business Intelligence projects
218+
*.rdl.data
219+
*.bim.layout
220+
*.bim_*.settings
221+
222+
# Microsoft Fakes
223+
FakesAssemblies/
224+
225+
# GhostDoc plugin setting file
226+
*.GhostDoc.xml
227+
228+
# Node.js Tools for Visual Studio
229+
.ntvs_analysis.dat
230+
231+
# Visual Studio 6 build log
232+
*.plg
233+
234+
# Visual Studio 6 workspace options file
235+
*.opt
236+
237+
# Visual Studio LightSwitch build output
238+
**/*.HTMLClient/GeneratedArtifacts
239+
**/*.DesktopClient/GeneratedArtifacts
240+
**/*.DesktopClient/ModelManifest.xml
241+
**/*.Server/GeneratedArtifacts
242+
**/*.Server/ModelManifest.xml
243+
_Pvt_Extensions
244+
245+
# Paket dependency manager
246+
.paket/paket.exe
247+
paket-files/
248+
249+
# FAKE - F# Make
250+
.fake/
251+
252+
# JetBrains Rider
253+
.idea/
254+
*.sln.iml
255+
256+
# CodeRush
257+
.cr/
258+
259+
# Python Tools for Visual Studio (PTVS)
260+
__pycache__/
261+
*.pyc
262+
263+
# VS Code
264+
.vscode/
265+
266+
[Tt]ools/**
267+
![Tt]ools/packages.config
268+
BuildArtifacts/**

GitVersion.yml

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
mode: ContinuousDelivery
2+
next-version: 2.0.0
3+
branches: {}
4+
ignore:
5+
sha: []
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Xer.Delegator;
2+
3+
namespace Xer.Cqrs.EventStack
4+
{
5+
/// <summary>
6+
/// Represents an object that delegates events to a one or more message handlers.
7+
/// </summary>
8+
public class EventDelegator : MessageDelegator
9+
{
10+
/// <summary>
11+
/// Constructor.
12+
/// </summary>
13+
/// <param name="messageHandlerResolver">Message handler resolver.</param>
14+
public EventDelegator(IMessageHandlerResolver messageHandlerResolver)
15+
: base(messageHandlerResolver)
16+
{
17+
}
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using System;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
using Xer.Cqrs.EventStack;
5+
6+
namespace Xer.Delegator.Registration
7+
{
8+
public static class MultiMessageHandlerRegistrationExtensions
9+
{
10+
#region IMessageHandlerRegistration Extensions
11+
12+
/// <summary>
13+
/// Register event async handler as subscriber.
14+
/// </summary>
15+
/// <typeparam name="TEvent">Type of event to subscribe to.</typeparam>
16+
/// <param name="registration">Instance of MultiMessageHandlerRegistration.</param>
17+
/// <param name="eventAsyncHandlerFactory">Factory which will create an instance of an event handler that handles the specified <typeparamref name="TEvent"/> event.</param>
18+
public static void RegisterEventHandler<TEvent>(this MultiMessageHandlerRegistration registration,
19+
Func<IEventAsyncHandler<TEvent>> eventAsyncHandlerFactory)
20+
where TEvent : class
21+
{
22+
if (registration == null)
23+
{
24+
throw new ArgumentNullException(nameof(registration));
25+
}
26+
27+
if (eventAsyncHandlerFactory == null)
28+
{
29+
throw new ArgumentNullException(nameof(eventAsyncHandlerFactory));
30+
}
31+
32+
MessageHandlerDelegate messageHandlerDelegate = EventHandlerDelegateBuilder.FromEventHandlerFactory(eventAsyncHandlerFactory);
33+
registration.Register<TEvent>(messageHandlerDelegate.Invoke);
34+
}
35+
36+
/// <summary>
37+
/// Register event handler as subscriber.
38+
/// </summary>
39+
/// <typeparam name="TEvent">Type of event to subscribe to.</typeparam>
40+
/// <param name="registration">Instance of MultiMessageHandlerRegistration.</param>
41+
/// <param name="eventHandlerFactory">Factory which will create an instance of an event handler that handles the specified <typeparamref name="TEvent"/> event.</param>
42+
/// <param name="yieldExecution">True if execution of synchronous handler should yield. Otherwise, false.</param>
43+
public static void RegisterEventHandler<TEvent>(this MultiMessageHandlerRegistration registration,
44+
Func<IEventHandler<TEvent>> eventHandlerFactory,
45+
bool yieldExecution = false)
46+
where TEvent : class
47+
{
48+
if (registration == null)
49+
{
50+
throw new ArgumentNullException(nameof(registration));
51+
}
52+
53+
if (eventHandlerFactory == null)
54+
{
55+
throw new ArgumentNullException(nameof(eventHandlerFactory));
56+
}
57+
58+
MessageHandlerDelegate messageHandlerDelegate = EventHandlerDelegateBuilder.FromEventHandlerFactory(eventHandlerFactory, yieldExecution);
59+
registration.Register<TEvent>(messageHandlerDelegate.Invoke);
60+
}
61+
62+
#endregion IMessageHandlerRegistration Extensions
63+
}
64+
}

0 commit comments

Comments
 (0)