using System.Threading.Tasks;
ICommand<IOrderCommand> concreateType = null!;
var command = (ICommand<CreateOrderCommand>)concreateType;
public interface IOrderCommand
public interface ICommand<in T> where T : IOrderCommand
Task<OrderResult> HandleAsync(T orderCommand);
public class CreateOrderCommand : IOrderCommand
public class Concreate : ICommand<CreateOrderCommand>
public Task<OrderResult> HandleAsync(CreateOrderCommand command)
throw new NotImplementedException();