Skip to content

Commit

Permalink
use IServiceCollection instead of IMvcBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusz96 committed Aug 7, 2024
1 parent cdb4138 commit 5a72ee7
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 70 deletions.
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,8 +236,7 @@ Install-Package PipelineNet.ServiceProvider.AspNetCore
It includes extension methods for registering factories and automatic middleware registration through assembly scanning:
```C#
builder.Services.AddScoped<IMyService, MyService>();
builder.Services.AddControllers()
.AddPipelineNet(typeof(RoudCornersAsyncMiddleware).Assembly); // Add pipeline and chain of responsibility factories and all middleware from the assembly
builder.Services.AddPipelineNetAspNetCore(typeof(RoudCornersAsyncMiddleware).Assembly); // Add pipeline and chain of responsibility factories and all middleware from the assembly
public interface IMyService
{
Expand Down Expand Up @@ -285,7 +284,7 @@ public class RoudCornersAsyncMiddleware : IAsyncMiddleware<Bitmap>
}
```

Note that `PipelineNet.ServiceProvider.AspNetCore` uses `IHttpContextAccessor` and thus by default, cannot be used outside of HTTP request. You can create your own implementation though.
Note that `PipelineNet.ServiceProvider.AspNetCore` uses `IHttpContextAccessor` so it cannot be used outside of the HTTP request.

### Unity implementation

Expand Down
5 changes: 3 additions & 2 deletions src/PipelineNet.ServiceProvider.AspNetCore.Tests/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@

// Add services to the container.

builder.Services.AddPipelineNetAspNetCore(typeof(RoudCornersAsyncMiddleware).Assembly);

builder.Services.AddLogging(builder =>
builder.Services.AddSingleton<ILoggerProvider, TestOutputHelperLoggerProvider>());

builder.Services.AddControllers()
.AddPipelineNet(typeof(RoudCornersAsyncMiddleware).Assembly);
builder.Services.AddControllers();

var app = builder.Build();

Expand Down
65 changes: 0 additions & 65 deletions src/PipelineNet.ServiceProvider.AspNetCore/MvcBuilderExtensions.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using PipelineNet.MiddlewareResolver;
using PipelineNet.ServiceProvider.AspNetCore.MiddlewareResolver;
using PipelineNet.ServiceProvider.ChainsOfResponsibility.Factories;
using PipelineNet.ServiceProvider.Pipelines.Factories;
using System;
using System.Collections.Generic;
using System.Reflection;

namespace PipelineNet.ServiceProvider.AspNetCore
{
/// <summary>
/// Extension methods to the service collection.
/// </summary>
public static class ServiceCollectionExtensions
{
/// <summary>
/// Adds pipeline and chain of responsibility factories. Adds all middleware from assemblies.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="assemblies">Assemblies to scan.</param>
/// <param name="lifetime">The lifetime of the registered middleware.</param>
/// <returns>The service collection.</returns>
/// <remarks>Middleware instances will be resolved using the <see cref="IHttpContextAccessor"/>.</remarks>
public static IServiceCollection AddPipelineNetAspNetCore(
this IServiceCollection services,
IEnumerable<Assembly> assemblies,
ServiceLifetime lifetime = ServiceLifetime.Scoped)
{
if (services == null) throw new ArgumentNullException("services");
if (assemblies == null) throw new ArgumentNullException("assemblies");

services.AddMiddlewareFromAssemblies(assemblies, lifetime);

services.AddHttpContextAccessor();

services.TryAddSingleton<IMiddlewareResolver, HttpContextAccessorMiddlewareResolver>();

services.TryAddSingleton(typeof(IPipelineFactory<>), typeof(AsyncPipelineFactory<>));
services.TryAddSingleton(typeof(IAsyncPipelineFactory<>), typeof(AsyncPipelineFactory<>));
services.TryAddSingleton(typeof(IResponsibilityChainFactory<,>), typeof(ResponsibilityChainFactory<,>));
services.TryAddSingleton(typeof(IAsyncResponsibilityChainFactory<,>), typeof(AsyncResponsibilityChainFactory<,>));

return services;
}

/// <summary>
/// Adds pipeline and chain of responsibility factories. Adds all middleware from the assembly.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="assembly">The assembly to scan.</param>
/// <param name="lifetime">The lifetime of the registered middleware.</param>
/// <returns>The service collection.</returns>
/// <remarks>Middleware instances will be resolved using the <see cref="IHttpContextAccessor"/>.</remarks>
public static IServiceCollection AddPipelineNetAspNetCore(
this IServiceCollection services,
Assembly assembly,
ServiceLifetime lifetime = ServiceLifetime.Scoped)
{
if (services == null) throw new ArgumentNullException("services");
if (assembly == null) throw new ArgumentNullException("assembly");

return services.AddPipelineNetAspNetCore(new[] { assembly }, lifetime);
}
}
}

0 comments on commit 5a72ee7

Please sign in to comment.