You could change your interface to this (which looks kind of cleaner to me):
public interface ICommandHandler<in TCommand, TResult> where TCommand : ICommand
{
ICommandResult<TResult> Execute( TCommand command );
}
Or you could add the type parameter of ICommandResult<TResult>
to your generic parameter list:
public interface ICommandHandler<in TCommand, TCommandResult, TResult>
where TCommand : ICommand
where TCommandResult: ICommandResult<TResult>
{
TCommandResult Execute( TCommand command );
}