Processor for handling generic commands
Your marker interface has no added value. In fact, it's an anti-pattern because you provide a generic type parameter on an interface ICommand, only to enforce it on another interface ICommandResult.


public interface ICommand&lt;TResultData&gt;
{ }

public interface ICommandHandler&lt;TCommand, TResultData&gt;
    where TCommand : ICommand&lt;TResultData&gt;
{    
    CommandResult&lt;TResultData&gt; Handle(TCommand command);
}



Since specific commands have nothing in common, I would not create an interface for commands. Also, TResultData has nothing to do with a command, and everything with the command result. 

The handler could be rewritten as follows:

public interface ICommandHandler&lt;TCommand, TResultData&gt;
{    
    CommandResult&lt;TResultData&gt; Handle(TCommand command);
}