Make ServiceCollectionExtensions consistent
This commit is contained in:
parent
73a9ed7a64
commit
38b727948b
|
|
@ -12,9 +12,7 @@ namespace ElmPageSample
|
|||
{
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
services.AddElm();
|
||||
|
||||
services.ConfigureElm(elmOptions =>
|
||||
services.AddElm(elmOptions =>
|
||||
{
|
||||
elmOptions.Filter = (loggerName, loglevel) => loglevel == LogLevel.Debug;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -23,9 +23,8 @@ namespace Microsoft.AspNetCore.Builder
|
|||
|
||||
// add the elm provider to the factory here so the logger can start capturing logs immediately
|
||||
var factory = app.ApplicationServices.GetRequiredService<ILoggerFactory>();
|
||||
var store = app.ApplicationServices.GetRequiredService<ElmStore>();
|
||||
var options = app.ApplicationServices.GetService<IOptions<ElmOptions>>();
|
||||
factory.AddProvider(new ElmLoggerProvider(store, options?.Value ?? new ElmOptions()));
|
||||
var provider = app.ApplicationServices.GetRequiredService<ElmLoggerProvider>();
|
||||
factory.AddProvider(provider);
|
||||
|
||||
return app.UseMiddleware<ElmCaptureMiddleware>();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
using System;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace Microsoft.AspNetCore.Diagnostics.Elm
|
||||
{
|
||||
|
|
@ -11,7 +12,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Elm
|
|||
private readonly ElmStore _store;
|
||||
private readonly ElmOptions _options;
|
||||
|
||||
public ElmLoggerProvider(ElmStore store, ElmOptions options)
|
||||
public ElmLoggerProvider(ElmStore store, IOptions<ElmOptions> options)
|
||||
{
|
||||
if (store == null)
|
||||
{
|
||||
|
|
@ -24,7 +25,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Elm
|
|||
}
|
||||
|
||||
_store = store;
|
||||
_options = options;
|
||||
_options = options.Value;
|
||||
}
|
||||
|
||||
public ILogger CreateLogger(string name)
|
||||
|
|
|
|||
|
|
@ -3,45 +3,50 @@
|
|||
|
||||
using System;
|
||||
using Microsoft.AspNetCore.Diagnostics.Elm;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for setting up Elm services in an <see cref="IServiceCollection" />.
|
||||
/// </summary>
|
||||
public static class ElmServiceCollectionExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Registers an <see cref="ElmStore"/> and configures default <see cref="ElmOptions"/>.
|
||||
/// Adds error logging middleware services to the specified <see cref="IServiceCollection" />.
|
||||
/// </summary>
|
||||
public static IServiceCollection AddElm(this IServiceCollection services)
|
||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
||||
public static void AddElm(this IServiceCollection services)
|
||||
{
|
||||
if (services == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(services));
|
||||
}
|
||||
|
||||
services.AddSingleton<ElmStore>();
|
||||
return services;
|
||||
|
||||
services.AddOptions();
|
||||
services.TryAddSingleton<ElmStore>();
|
||||
services.TryAddSingleton<ElmLoggerProvider>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configures a set of <see cref="ElmOptions"/> for the application.
|
||||
/// Adds error logging middleware services to the specified <see cref="IServiceCollection" />.
|
||||
/// </summary>
|
||||
/// <param name="services">The services available in the application.</param>
|
||||
/// <param name="configureOptions">The <see cref="ElmOptions"/> which need to be configured.</param>
|
||||
public static void ConfigureElm(
|
||||
this IServiceCollection services,
|
||||
Action<ElmOptions> configureOptions)
|
||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
||||
/// <param name="setupAction">An <see cref="Action{ElmOptions}"/> to configure the provided <see cref="ElmOptions"/>.</param>
|
||||
public static void AddElm(this IServiceCollection services, Action<ElmOptions> setupAction)
|
||||
{
|
||||
if (services == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(services));
|
||||
}
|
||||
|
||||
if (configureOptions == null)
|
||||
if (setupAction == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(configureOptions));
|
||||
throw new ArgumentNullException(nameof(setupAction));
|
||||
}
|
||||
|
||||
services.Configure(configureOptions);
|
||||
services.AddElm();
|
||||
services.Configure(setupAction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,17 +1,31 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||
|
||||
using System;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.MiddlewareAnalysis;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
|
||||
namespace Microsoft.Extensions.DependencyInjection
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for setting up diagnostic services in an <see cref="IServiceCollection" />.
|
||||
/// </summary>
|
||||
public static class AnalysisServiceCollectionExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Adds diagnostic services to the specified <see cref="IServiceCollection" />.
|
||||
/// </summary>
|
||||
/// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
|
||||
public static IServiceCollection AddMiddlewareAnalysis(this IServiceCollection services)
|
||||
{
|
||||
// This should prevent AnalysisStartupFilter from being registered more than once.
|
||||
if (services == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(services));
|
||||
}
|
||||
|
||||
// Prevent registering the same implementation of IStartupFilter (AnalysisStartupFilter) multiple times.
|
||||
// But allow multiple registrations of different implementation types.
|
||||
services.TryAddEnumerable(ServiceDescriptor.Transient<IStartupFilter, AnalysisStartupFilter>());
|
||||
return services;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ using System.Linq;
|
|||
using System.Threading;
|
||||
using Microsoft.AspNetCore.Diagnostics.Elm;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Xunit;
|
||||
|
||||
namespace Microsoft.AspNetCore.Diagnostics.Tests
|
||||
|
|
@ -22,7 +23,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Tests
|
|||
// Arrange
|
||||
var store = new ElmStore();
|
||||
var options = new ElmOptions() { Filter = filter ?? _filter };
|
||||
var provider = new ElmLoggerProvider(store, options);
|
||||
var provider = new ElmLoggerProvider(store, Options.Create(options));
|
||||
var logger = (ElmLogger)provider.CreateLogger(name ?? _name);
|
||||
|
||||
return new Tuple<ElmLogger, ElmStore>(logger, store);
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Tests
|
|||
optionsMock
|
||||
.SetupGet(o => o.Value)
|
||||
.Returns(new ElmOptions());
|
||||
factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object.Value));
|
||||
factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object));
|
||||
|
||||
RequestDelegate next = _ =>
|
||||
{
|
||||
|
|
@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Tests
|
|||
optionsMock
|
||||
.SetupGet(o => o.Value)
|
||||
.Returns(new ElmOptions());
|
||||
factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object.Value));
|
||||
factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object));
|
||||
|
||||
RequestDelegate next = _ =>
|
||||
{
|
||||
|
|
@ -128,7 +128,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Tests
|
|||
optionsMock
|
||||
.SetupGet(o => o.Value)
|
||||
.Returns(new ElmOptions());
|
||||
factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object.Value));
|
||||
factory.AddProvider(new ElmLoggerProvider(elmStore, optionsMock.Object));
|
||||
|
||||
RequestDelegate next = _ =>
|
||||
{
|
||||
|
|
@ -230,7 +230,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Tests
|
|||
// Arrange
|
||||
var context = new DefaultHttpContext();
|
||||
var loggerFactory = new LoggerFactory();
|
||||
loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions()));
|
||||
loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), Options.Create(new ElmOptions())));
|
||||
|
||||
// Act & Assert
|
||||
var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) =>
|
||||
|
|
@ -256,7 +256,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Tests
|
|||
};
|
||||
context.Features.Set<IHttpRequestIdentifierFeature>(requestIdentifierFeature);
|
||||
var loggerFactory = new LoggerFactory();
|
||||
loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions()));
|
||||
loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), Options.Create(new ElmOptions())));
|
||||
|
||||
var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) =>
|
||||
{
|
||||
|
|
@ -278,7 +278,7 @@ namespace Microsoft.AspNetCore.Diagnostics.Tests
|
|||
var requestIdentifierFeature = new HttpRequestIdentifierFeature() { TraceIdentifier = requestId };
|
||||
context.Features.Set<IHttpRequestIdentifierFeature>(requestIdentifierFeature);
|
||||
var loggerFactory = new LoggerFactory();
|
||||
loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), new ElmOptions()));
|
||||
loggerFactory.AddProvider(new ElmLoggerProvider(new ElmStore(), Options.Create(new ElmOptions())));
|
||||
|
||||
var errorPageMiddleware = new ElmCaptureMiddleware((innerContext) =>
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue