public DuplexStreamingServerCallHandler( Method <TRequest, TResponse> method, DuplexStreamingServerMethod <TService, TRequest, TResponse> invoker, MethodContext methodContext, ILoggerFactory loggerFactory, IGrpcServiceActivator serviceActivator, IServiceProvider serviceProvider) : base(method, methodContext, loggerFactory, serviceActivator, serviceProvider) { _invoker = invoker; if (MethodContext.HasInterceptors) { var interceptorPipeline = new InterceptorPipelineBuilder <TRequest, TResponse>(MethodContext.Interceptors, ServiceProvider); _pipelineInvoker = interceptorPipeline.DuplexStreamingPipeline(ResolvedInterceptorInvoker); } }
public DuplexStreamingServerCallHandler( Method <TRequest, TResponse> method, DuplexStreamingServerMethod <TService, TRequest, TResponse> invoker, GrpcServiceOptions serviceOptions, ILoggerFactory loggerFactory, IGrpcServiceActivator <TService> serviceActivator, IServiceProvider serviceProvider) : base(method, serviceOptions, loggerFactory, serviceActivator, serviceProvider) { _invoker = invoker; if (ServiceOptions.HasInterceptors) { DuplexStreamingServerMethod <TRequest, TResponse> resolvedInvoker = async(requestStream, responseStream, resolvedContext) => { GrpcActivatorHandle <TService> serviceHandle = default; try { serviceHandle = ServiceActivator.Create(resolvedContext.GetHttpContext().RequestServices); await _invoker( serviceHandle.Instance, requestStream, responseStream, resolvedContext); } finally { if (serviceHandle.Instance != null) { ServiceActivator.Release(serviceHandle); } } }; var interceptorPipeline = new InterceptorPipelineBuilder <TRequest, TResponse>(ServiceOptions.Interceptors, ServiceProvider); _pipelineInvoker = interceptorPipeline.DuplexStreamingPipeline(resolvedInvoker); } }
public DuplexStreamingServerCallHandler( Method <TRequest, TResponse> method, DuplexStreamingServerMethod <TService, TRequest, TResponse> invoker, GrpcServiceOptions serviceOptions, ILoggerFactory loggerFactory) : base(method, serviceOptions, loggerFactory) { _invoker = invoker; if (!ServiceOptions.Interceptors.IsEmpty) { DuplexStreamingServerMethod <TRequest, TResponse> resolvedInvoker = async(requestStream, responseStream, resolvedContext) => { var activator = resolvedContext.GetHttpContext().RequestServices.GetRequiredService <IGrpcServiceActivator <TService> >(); TService?service = null; try { service = activator.Create(); await _invoker( service, requestStream, responseStream, resolvedContext); } finally { if (service != null) { activator.Release(service); } } }; var interceptorPipeline = new InterceptorPipelineBuilder <TRequest, TResponse>(ServiceOptions.Interceptors); _pipelineInvoker = interceptorPipeline.DuplexStreamingPipeline(resolvedInvoker); } }