Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

丁松杰 / Pole

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Members
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Switch branch/tag
  • Pole
  • src
  • Pole.Grpc
  • Validation
  • ServiceCollectionExtensions.cs
Find file
BlameHistoryPermalink
  • dingsongjie's avatar
    完善 grpc demo · 0405a997
    dingsongjie committed 5 years ago
    0405a997
ServiceCollectionExtensions.cs 1.78 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
using FluentValidation;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Pole.Core.Utils;
using Pole.Grpc.Validation;
using Pole.Grpc.Validation.Internal;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace Microsoft.Extensions.DependencyInjection
{
    public static class ServiceCollectionValidationExtensions
    {
        public static IServiceCollection AddGrpcValidation(this IServiceCollection services)
        {
            services.AddSingleton<IValidatorProvider, DefaultValidatorProvider>();
            services.AddSingleton<IValidatorRegistrar, ValidatorRegistrar>();
            services.AddSingleton<IValidatorErrorMessageHandler, DefaultValidatorErrorMessageHandler>();
            return services;
        }
        public static IServiceCollection AddGrpcRequestValidator(this IServiceCollection services, ServiceLifetime lifetime = ServiceLifetime.Singleton)
        {
            using (var serviceProvider = services.BuildServiceProvider())
            {
                var validatorRegistrar = serviceProvider.GetRequiredService<IValidatorRegistrar>();

                foreach (var assembly in AssemblyHelper.GetAssemblies(serviceProvider.GetService<ILogger<ValidatorRegistrar>>()))
                {
                    var validators = assembly.GetTypes().Where(m => m.GetInterfaces().FirstOrDefault(t =>t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IValidator<>)) != null);
                    foreach (var validator in validators)
                    {
                        validatorRegistrar.Register(validator, services);
                    }
                }
                return services;
            }
        }
    }
}