public CommandHandlingSettings( [NotNull] ICommandHandlerResolver handlerResolver, [NotNull] ResolveCommandType resolveCommandType) { Condition.Requires(handlerResolver, "handlerResolver").IsNotNull(); Condition.Requires(resolveCommandType, "ResolveCommandType").IsNotNull(); _handlerResolver = handlerResolver; _resolveCommandType = resolveCommandType; }
public CommandHandlingSettings( [NotNull] ICommandHandlerResolver handlerResolver, [NotNull] ResolveCommandType resolveCommandType) { Ensure.That(handlerResolver, "handlerResolver").IsNotNull(); Ensure.That(resolveCommandType, "ResolveCommandType").IsNotNull(); _handlerResolver = handlerResolver; _resolveCommandType = resolveCommandType; _deserializeCommand = CatchDeserializationExceptions( (commandReader, type) => { var body = commandReader.ReadToEnd(); // Will cause LOH problems if command json > 85KB return(SimpleJson.DeserializeObject(body, type, CommandClient.JsonSerializerStrategy)); }); }
public CommandHandlingSettings( [NotNull] ICommandHandlerResolver handlerResolver, [NotNull] ResolveCommandType resolveCommandType) { Ensure.That(handlerResolver, "handlerResolver").IsNotNull(); Ensure.That(resolveCommandType, "ResolveCommandType").IsNotNull(); _handlerResolver = handlerResolver; _resolveCommandType = resolveCommandType; _deserializeCommand = CatchDeserializationExceptions( (commandReader, type) => { var body = commandReader.ReadToEnd(); // Will cause LOH problems if command json > 85KB return SimpleJson.DeserializeObject(body, type, CommandClient.JsonSerializerStrategy); }); }
static void Main() { var resolver = new CommandHandlerResolver(new CommandModule()); // 1. Create a map to resolve types from a key. // This could of course be done with reflection + conventions. // For the sake of example, we're going to be explict. var commandMap = new[] { typeof(CommandVersioning.V1.Command), typeof(CommandVersioning.V2.Command), }.ToDictionary(t => t.Name.ToLowerInvariant(), t => t); var resolveCommandType = new ResolveCommandType((typeName, version) => { // 2. In this example, we're not handling unversioned commands. You // may of course handle them. if (version == null) { return(null); // 3. Return null if the command type can't be resolved. } // 4. Here we're just converting the typeName to a key that matches our // convetion. var typeNameSegments = typeName.Split('.').ToList(); // my.type.name -> { my, type, name } typeNameSegments.Insert(typeNameSegments.Count - 1, "v" + version); // { my, type, name } -> { my, type, vX, name } typeName = string.Join(".", typeNameSegments); // { my, type, vX, name } -> my.type.vX.name Type commandType; commandMap.TryGetValue(typeName, out commandType); return(commandType); }); // 5. CommandHandlingSettings has a contructor overload to pass in the command type resolver. var settings = new CommandHandlingSettings(resolver, resolveCommandType); }