Created
June 20, 2012 08:44
-
-
Save codescribler/2958848 to your computer and use it in GitHub Desktop.
Makes an event from the provided command - see gregory young's stuff on CQRS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protected TE MakeEvent<TE>(Command command) | |
where TE : Event | |
{ | |
return MakeEvent<TE>(command, new List<object>()); | |
} | |
private TE MakeEvent<TE>(Command command, IEnumerable<object> additionalParams) | |
where TE : Event | |
{ | |
var type = typeof(TE); | |
ConstructorInfo constructorInfo = type.GetConstructors().Where(t => t.GetParameters().Any()).ToList().SingleOrDefault(); | |
if (constructorInfo == null) return Activator.CreateInstance<TE>(); | |
List<string> ctrVariableNames = constructorInfo.GetParameters().Select(p => p.Name).ToList(); | |
var commandType = command.GetType(); | |
var commandFields = commandType.GetFields(); | |
var fieldInfos = commandFields.Where(f => ctrVariableNames.Contains(ToCamelCase(f.Name))); | |
List<object> parameters = fieldInfos.Select(fieldInfo => fieldInfo.GetValue(command)).ToList(); | |
parameters.AddRange(additionalParams); | |
return (TE)Activator.CreateInstance(type, parameters.ToArray()); | |
} | |
private string ToCamelCase(string text) | |
{ | |
var firstCharacter = text[0].ToString().ToLower(); | |
return firstCharacter + text.Substring(1, text.Length - 1); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment