public async Task HandleAsync(IServiceOnceApiConvert convert, ChannelType channelType) { try { var contractOptions = _serviceProvider.GetRequiredService <IOptions <ContractOptions> >(); var rpcContextAccessor = _serviceProvider.GetRequiredService <IActionExecutingContextAccessor>(); using IServiceScope scope = _serviceProvider.GetRequiredService <IServiceScopeFactory>().CreateScope(); GlobalServiceProvider.Provider = _serviceProvider; GlobalServiceProvider.ScopeProvider = scope.ServiceProvider; var instances = scope.ServiceProvider.GetContractInstances(contractOptions.Value); var onceTransfer = new ServiceOnceTransfer(instances, scope.ServiceProvider, convert, _middlewareBuilder, rpcContextAccessor, channelType, _logger); await onceTransfer.StartAsync(); await onceTransfer.HandleRequestAsync(); } catch (Exception e) { _logger.LogCritical(e, null); throw; } }
public ServiceOnceTransfer(List <Instance> instances, IServiceProvider serviceProvider, IServiceOnceApiConvert convert, MiddlewareBuilder middlewareBuilder, IActionExecutingContextAccessor actionExecutingContextAccessor, ChannelType channelType, ILogger logger) { _instances = instances; _serviceProvider = serviceProvider; _middlewareBuilder = middlewareBuilder; _actionExecutingContextAccessor = actionExecutingContextAccessor; _channelType = channelType; _logger = logger; _convert = convert; }