/// <summary> /// Adds and configures chronoscope services on the host builder. /// Multiple calls are cumulative. /// </summary> /// <param name="builder">The builder to extend.</param> /// <param name="configure">The configuration action to apply</param> /// <returns>The same host builder to allow chaining.</returns> public static IHostBuilder UseChronoscope(this IHostBuilder builder, Action <HostBuilderContext, IChronoscopeBuilder> configure) { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } if (configure is null) { throw new ArgumentNullException(nameof(configure)); } ChronoscopeBuilder chrono; if (builder.Properties.TryGetValue(BuilderKey, out var value)) { chrono = (ChronoscopeBuilder)value; } else { builder.Properties[BuilderKey] = chrono = new ChronoscopeBuilder(builder); } chrono.ConfigureChronoscope(configure); return(builder); }
public void UseChronoscopeUsesCurrentChronoscopeBuilder() { // arrange IHostBuilder builder = Mock.Of <IHostBuilder>(); ChronoscopeBuilder cbuilder = new ChronoscopeBuilder(builder); var properties = new Dictionary <object, object>() { { nameof(ChronoscopeBuilder), cbuilder } }; Mock.Get(builder).Setup(x => x.Properties).Returns(properties);
public void ConfigureServicesThrowsOnNullAction() { // arrange var builder = Mock.Of <IHostBuilder>(); var cbuilder = new ChronoscopeBuilder(builder); Action <HostBuilderContext, IServiceCollection> configure = null; // act var ex = Assert.Throws <ArgumentNullException>(() => cbuilder.ConfigureServices(configure)); // assert Assert.Equal(nameof(configure), ex.ParamName); }