/// <summary> /// Customize your resilience settings for <see cref="Spigot"/> /// </summary> /// <param name="src">An instance of <see cref="ISpigotBuilder"/></param> /// <param name="resilienceBuilder">An action to build resilience</param> /// <returns></returns> public static ISpigotBuilder WithResilience(this ISpigotBuilder src, Action <Resilience> resilienceBuilder) { var resilience = new Resilience(); resilienceBuilder(resilience); src.Resilience = resilience; return(src); }
/// <summary> /// Allows for the configuration of the Spigot via an instance of <see cref="ISpigotBuilder"/> /// </summary> internal void Setup(ISpigotBuilder builder) { if (_initialized) { _logger.LogInformation("Unbinding previous spigot configuration for new settings"); foreach (var stream in Streams) { stream.DataArrived -= Spigot_DataArrived; } Streams = null; AfterReceive = null; BeforeSend = null; InstanceIdentifier = Guid.Empty; ApplicationName = string.Empty; Resilience = null; } AfterReceive = builder.AfterReceive; BeforeSend = builder.BeforeSend; InstanceIdentifier = builder.InstanceIdentifier; ApplicationName = builder.ApplicationName; Resilience = builder.Resilience ?? new Resilience(); _initialized = true; builder.Services.AddSingleton(this); var provider = builder.Services.BuildServiceProvider(); Streams = provider.GetServices <ISpigotStream>() ?? new[] { new LocalStream() }; Serializer = provider.GetService <ISpigotSerializer>() ?? new DefaultJsonSerializer(); foreach (var stream in Streams) { stream.DataArrived += Spigot_DataArrived; } foreach (var knobType in builder.Knobs) { var knob = provider.GetService(knobType) as Knob; builder.Services.AddSingleton(knob); knob?.Register(); } }
/// <summary> /// Registers a <see cref="Knob"/> to handle messages from Spigot Streams /// </summary> /// <param name="src"></param> /// <typeparam name="TKnob"></typeparam> /// <typeparam name="T"></typeparam> /// <returns></returns> public static ISpigotBuilder AddKnob <TKnob, T>(this ISpigotBuilder src) where TKnob : Knob <T> where T : class, new() { src.Services.AddSingleton <TKnob>(); src.Knobs.Add(typeof(TKnob)); return(src); }
/// <summary> /// Assigns a friendly name to the Spigot /// </summary> /// <param name="src"></param> /// <param name="friendlyName"></param> /// <returns></returns> public static ISpigotBuilder WithFriendlyName(this ISpigotBuilder src, string friendlyName) { src.ApplicationName = friendlyName; return(src); }
/// <summary> /// Allows for intercepting the message after receipt but before entering the pipeline /// </summary> /// <param name="src"></param> /// <param name="afterReceiveAction"></param> /// <returns></returns> public static ISpigotBuilder AddAfterReceive(this ISpigotBuilder src, Action <CloudEvent> afterReceiveAction) { src.AfterReceive = afterReceiveAction; return(src); }
/// <summary> /// Allows for intercepting the message before sending. This can be used for advanced scenarios /// </summary> /// <param name="src"></param> /// <param name="beforeSendAction"></param> /// <returns></returns> public static ISpigotBuilder AddBeforeSend(this ISpigotBuilder src, Action <CloudEvent> beforeSendAction) { src.BeforeSend = beforeSendAction; return(src); }