public IExecuteActivityScopeContext <TActivity, TArguments> GetScope(ExecuteContext <TArguments> context) { if (context.TryGetPayload <IKernel>(out var kernel)) { kernel.UpdateScope(context); var activity = kernel.Resolve <TActivity>(new Arguments().AddTyped(context.Arguments)); ExecuteActivityContext <TActivity, TArguments> activityContext = context.CreateActivityContext(activity); return(new ExistingExecuteActivityScopeContext <TActivity, TArguments>(activityContext, ReleaseComponent)); } var scope = _kernel.CreateNewOrUseExistingMessageScope(); try { ExecuteContext <TArguments> scopeContext = new ExecuteContextScope <TArguments>(context, _kernel); _kernel.UpdateScope(scopeContext); var activity = _kernel.Resolve <TActivity>(new Arguments().AddTyped(context.Arguments)); ExecuteActivityContext <TActivity, TArguments> activityContext = scopeContext.CreateActivityContext(activity); return(new CreatedExecuteActivityScopeContext <IDisposable, TActivity, TArguments>(scope, activityContext, ReleaseComponent)); } catch { scope.Dispose(); throw; } }
public async ValueTask <IExecuteActivityScopeContext <TActivity, TArguments> > GetScope(ExecuteContext <TArguments> context) { if (context.TryGetPayload <IServiceScope>(out var existingServiceScope)) { existingServiceScope.SetCurrentConsumeContext(context); var activity = existingServiceScope.ServiceProvider.GetService <TActivity>(); if (activity == null) { throw new ConsumerException($"Unable to resolve activity type '{TypeMetadataCache<TActivity>.ShortName}'."); } ExecuteActivityContext <TActivity, TArguments> activityContext = context.CreateActivityContext(activity); return(new ExistingExecuteActivityScopeContext <TActivity, TArguments>(activityContext)); } if (!context.TryGetPayload(out IServiceProvider serviceProvider)) { serviceProvider = _serviceProvider; } var serviceScope = serviceProvider.CreateScope(); try { ExecuteContext <TArguments> scopeContext = new ExecuteContextScope <TArguments>(context, serviceScope, serviceScope.ServiceProvider); serviceScope.SetCurrentConsumeContext(scopeContext); var activity = serviceScope.ServiceProvider.GetService <TActivity>(); if (activity == null) { throw new ConsumerException($"Unable to resolve activity type '{TypeMetadataCache<TActivity>.ShortName}'."); } ExecuteActivityContext <TActivity, TArguments> activityContext = scopeContext.CreateActivityContext(activity); return(new CreatedExecuteActivityScopeContext <IServiceScope, TActivity, TArguments>(serviceScope, activityContext)); } catch { if (serviceScope is IAsyncDisposable asyncDisposable) { await asyncDisposable.DisposeAsync().ConfigureAwait(false); } else { serviceScope.Dispose(); } throw; } }
public IExecuteActivityScopeContext <TActivity, TArguments> GetScope(ExecuteContext <TArguments> context) { if (context.TryGetPayload <IServiceScope>(out var existingServiceScope)) { existingServiceScope.UpdateScope(context); var activity = existingServiceScope.ServiceProvider.GetService <TActivity>(); if (activity == null) { throw new ConsumerException($"Unable to resolve activity type '{TypeMetadataCache<TActivity>.ShortName}'."); } ExecuteActivityContext <TActivity, TArguments> activityContext = context.CreateActivityContext(activity); return(new ExistingExecuteActivityScopeContext <TActivity, TArguments>(activityContext)); } if (!context.TryGetPayload(out IServiceProvider serviceProvider)) { serviceProvider = _serviceProvider; } var serviceScope = serviceProvider.CreateScope(); try { ExecuteContext <TArguments> scopeContext = new ExecuteContextScope <TArguments>(context, serviceScope, serviceScope.ServiceProvider); serviceScope.UpdateScope(scopeContext); var activity = serviceScope.ServiceProvider.GetService <TActivity>(); if (activity == null) { throw new ConsumerException($"Unable to resolve activity type '{TypeMetadataCache<TActivity>.ShortName}'."); } ExecuteActivityContext <TActivity, TArguments> activityContext = scopeContext.CreateActivityContext(activity); return(new CreatedExecuteActivityScopeContext <IServiceScope, TActivity, TArguments>(serviceScope, activityContext)); } catch { serviceScope.Dispose(); throw; } }
public IExecuteActivityScopeContext <TActivity, TArguments> GetScope(ExecuteContext <TArguments> context) { if (context.TryGetPayload <Scope>(out var existingScope)) { existingScope.UpdateScope(context); var activity = existingScope .Container .GetInstance <TActivity>(); ExecuteActivityContext <TActivity, TArguments> activityContext = context.CreateActivityContext(activity); return(new ExistingExecuteActivityScopeContext <TActivity, TArguments>(activityContext)); } var scope = AsyncScopedLifestyle.BeginScope(_container); try { ExecuteContext <TArguments> scopeContext = new ExecuteContextScope <TArguments>(context, scope); scope.UpdateScope(scopeContext); var activity = scope.Container.GetInstance <TActivity>(); ExecuteActivityContext <TActivity, TArguments> activityContext = scopeContext.CreateActivityContext(activity); return(new CreatedExecuteActivityScopeContext <Scope, TActivity, TArguments>(scope, activityContext)); } catch { scope.Dispose(); throw; } }