static (TriggersContextOptionsBuilder subject, Func <TriggersOptionExtension> extensionAccessor) CreateSubject() { var optionsBuilder = new DbContextOptionsBuilder(); TriggersContextOptionsBuilder subject = null; optionsBuilder.UseTriggers(x => subject = x); return(subject, () => optionsBuilder.Options.FindExtension <TriggersOptionExtension>()); }
public void AddAssemblyTriggers_AbstractTrigger_GetsIgnored() { var context = new DbContextOptionsBuilder(); var builder = new TriggersContextOptionsBuilder(context); builder.AddAssemblyTriggers(); var triggerOptionExtension = context.Options.Extensions.OfType <TriggersOptionExtension>().Single(); // Ensure that we did not register the AbstractTrigger Assert.Empty(triggerOptionExtension.Triggers.Where(x => ReferenceEquals(x.typeOrInstance, typeof(AbstractTrigger)))); }
public static TriggersContextOptionsBuilder UseTransactionTriggers(this TriggersContextOptionsBuilder triggersContextOptionsBuilder) { if (triggersContextOptionsBuilder is null) { throw new ArgumentNullException(nameof(triggersContextOptionsBuilder)); } return(triggersContextOptionsBuilder .AddTriggerType(typeof(IBeforeCommitTrigger <>)) .AddTriggerType(typeof(IAfterCommitTrigger <>)) .AddTriggerType(typeof(IBeforeRollbackTrigger <>)) .AddTriggerType(typeof(IAfterRollbackTrigger <>))); }
public static TriggersContextOptionsBuilder AddAssemblyTriggers(this TriggersContextOptionsBuilder builder, ServiceLifetime lifetime, params Assembly[] assemblies) { if (assemblies is null) { throw new ArgumentNullException(nameof(assemblies)); } var assemblyTypes = assemblies .SelectMany(x => x.GetTypes()) .Where(x => x.IsClass); foreach (var assemblyType in assemblyTypes) { builder.AddTrigger(assemblyType, lifetime); } return(builder); }
public static TriggersContextOptionsBuilder UseAspNetCoreIntegration(this TriggersContextOptionsBuilder builder) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } builder.UseApplicationScopedServiceProviderAccessor(serviceProvider => { var httpContextAccessor = serviceProvider.GetService <IHttpContextAccessor>(); if (httpContextAccessor == null) { throw new InvalidOperationException("No service for type 'Microsoft.AspNetCore.Http.IHttpContextAccessor' has been registered. Please make sure to call 'services.AddHttpContextAccessor()'"); } return(httpContextAccessor.HttpContext.RequestServices); }); return(builder); }
public static TriggersContextOptionsBuilder AddAssemblyTriggers(this TriggersContextOptionsBuilder builder, params Assembly[] assemblies) => AddAssemblyTriggers(builder, ServiceLifetime.Scoped, assemblies);
public static TriggersContextOptionsBuilder AddAssemblyTriggers(this TriggersContextOptionsBuilder builder, ServiceLifetime lifetime) => AddAssemblyTriggers(builder, lifetime, Assembly.GetCallingAssembly());
public static TriggersContextOptionsBuilder AddAssemblyTriggers(this TriggersContextOptionsBuilder builder) => AddAssemblyTriggers(builder, Assembly.GetCallingAssembly());