public ICompensateActivityScopeContext <TActivity, TLog> GetScope(CompensateContext <TLog> 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}'."); } CompensateActivityContext <TActivity, TLog> activityContext = context.CreateActivityContext(activity); return(new ExistingCompensateActivityScopeContext <TActivity, TLog>(activityContext)); } if (!context.TryGetPayload(out IServiceProvider serviceProvider)) { serviceProvider = _serviceProvider; } var serviceScope = serviceProvider.CreateScope(); try { serviceScope.UpdateScope(context); var activity = serviceScope.ServiceProvider.GetService <TActivity>(); if (activity == null) { throw new ConsumerException($"Unable to resolve activity type '{TypeMetadataCache<TActivity>.ShortName}'."); } CompensateActivityContext <TActivity, TLog> activityContext = context.CreateActivityContext(activity); activityContext.UpdatePayload(serviceScope); return(new CreatedCompensateActivityScopeContext <IServiceScope, TActivity, TLog>(serviceScope, activityContext)); } catch { serviceScope.Dispose(); throw; } }
public ICompensateActivityScopeContext <TActivity, TLog> GetScope(CompensateContext <TLog> context) { if (context.TryGetPayload <Scope>(out var existingScope)) { existingScope.UpdateScope(context); var activity = existingScope .Container .GetInstance <TActivity>(); CompensateActivityContext <TActivity, TLog> activityContext = context.CreateActivityContext(activity); return(new ExistingCompensateActivityScopeContext <TActivity, TLog>(activityContext)); } var scope = AsyncScopedLifestyle.BeginScope(_container); try { scope.UpdateScope(context); var activity = scope .Container .GetInstance <TActivity>(); CompensateActivityContext <TActivity, TLog> activityContext = context.CreateActivityContext(activity); var contextScope = scope; activityContext.UpdatePayload(scope); return(new CreatedCompensateActivityScopeContext <Scope, TActivity, TLog>(contextScope, activityContext)); } catch { scope.Dispose(); throw; } }
public ICompensateActivityScopeContext <TActivity, TLog> GetScope(CompensateContext <TLog> context) { if (context.TryGetPayload <ILifetimeScope>(out var existingLifetimeScope)) { var activity = existingLifetimeScope.Resolve <TActivity>(TypedParameter.From(context.Log)); CompensateActivityContext <TActivity, TLog> activityContext = context.CreateActivityContext(activity); return(new ExistingCompensateActivityScopeContext <TActivity, TLog>(activityContext)); } var parentLifetimeScope = _scopeProvider.GetLifetimeScope(context); var lifetimeScope = parentLifetimeScope.BeginLifetimeScope(_name, builder => { builder.ConfigureScope(context); _configureScope?.Invoke(builder, context); }); try { var activity = lifetimeScope.Resolve <TActivity>(TypedParameter.From(context.Log)); CompensateActivityContext <TActivity, TLog> activityContext = context.CreateActivityContext(activity); activityContext.UpdatePayload(lifetimeScope); return(new CreatedCompensateActivityScopeContext <ILifetimeScope, TActivity, TLog>(lifetimeScope, activityContext)); } catch { lifetimeScope.Dispose(); throw; } }