public static ICoreBuilder AddAutoRegistrationMediators(this ICoreBuilder builder,
                                                                IEnumerable <Assembly> assemblies)
        {
            builder.NotNull(nameof(builder));

            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(IRequestHandler <,>), false);
            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(INotificationHandler <>), true);
            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(IRequestPreProcessor <>), true);
            builder.Services.ConnectImplementationsToTypesClosing(assemblies,
                                                                  typeof(IRequestPostProcessor <,>), true);

            var multiOpenInterfaces = new[]
            {
                typeof(INotificationHandler <>),
                typeof(IRequestPreProcessor <>),
                typeof(IRequestPostProcessor <,>)
            };

            foreach (var multiOpenInterface in multiOpenInterfaces)
            {
                assemblies.InvokeTypes(type =>
                {
                    builder.Services.AddTransient(multiOpenInterface, type);
                },
                                       types => types
                                       .Where(type => Enumerable.Any(type.FindInterfacesThatClose(multiOpenInterface)))
                                       .Where(type => type.IsConcreteType() && type.IsOpenGenericType()));
            }

            return(builder);
        }
Exemplo n.º 2
0
 public void InjectTest()
 {
     _fieldBuilder.NotNull(nameof(_fieldBuilder));
     PropertyBuilder.NotNull(nameof(PropertyBuilder));
 }