Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 public static ICommandTypeBuilder WithQueryHandler <TExtendedQueryHandler>(this ICommandTypeBuilder builder)
 {
     return(builder.WithCommandHandler <TExtendedQueryHandler>());
 }