Esempio n. 1
0
        public static IServiceCollection AddKadderGrpcServer(
            this IServiceCollection services, Action <GrpcServerBuilder> builderAction)
        {
            var builder = new GrpcServerBuilder();

            builderAction(builder);
            var serviceBuilder = new GrpcServiceBuilder();

            services.AddSingleton(builder);
            services.RegSerializer(builder.JsonSerializer, builder.BinarySerializer);
            services.AddSingleton <GrpcHandlerBuilder>();
            services.AddSingleton(serviceBuilder);
            services.AddSingleton <GrpcMessageServicer>();
            foreach (var item in builder.Middlewares)
            {
                Middlewares.GrpcHandlerDirector.AddMiddleware(item);
            }
            foreach (var interceptor in builder.Interceptors)
            {
                services.AddSingleton(interceptor);
            }

            var namespaces  = "Kadder.CodeGeneration";
            var codeBuilder = new CodeBuilder(namespaces, namespaces);
            var grpcClasses = serviceBuilder.GenerateGrpcProxy(builder.Options, codeBuilder);
            // var proxyCode = serviceBuilder.GenerateHandlerProxy(builder.Options.GetScanAssemblies(), codeBuilder);
            var codeAssembly = codeBuilder.BuildAsync().Result;

            foreach (var grpcClass in grpcClasses)
            {
                namespaces = $"{grpcClass.Namespace}.{grpcClass.Name}";
                var grpcType = codeAssembly.Assembly.GetType(namespaces);
                services.AddSingleton(grpcType);
                builder.Services.Add(grpcType);
            }
            services.AddSingleton <GrpcServer>();

            return(services);
        }