/// <summary> /// Registers a new handler for a query or command /// </summary> public static ICommandTypeBuilder WithCommandHandler <TExtendedCommandHandler>(this ICommandTypeBuilder builder) { if (builder?.CommandType == null) { return(builder); } // construct generic request handler interfacae type var extendedHanderType = typeof(TExtendedCommandHandler); var requsetInterfaceType = extendedHanderType.GetInterfaces().FirstOrDefault(x => x.Name.Contains("IRequestHandler")); if (requsetInterfaceType == null) { return(builder); } if (requsetInterfaceType.IsGenericType && requsetInterfaceType.GenericTypeArguments.Length > 0) { var resultType = requsetInterfaceType.GenericTypeArguments.Last(); var serviceType = typeof(IRequestHandler <,>).MakeGenericType(new[] { builder.CommandType, resultType }); builder.Services.AddTransient(serviceType, extendedHanderType); } return(builder); }
public static ICommandTypeBuilder WithQueryHandler <TExtendedQueryHandler>(this ICommandTypeBuilder builder) { return(builder.WithCommandHandler <TExtendedQueryHandler>()); }