Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Warning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Important
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Den här artikeln visar hur du använder IMiddlewareFactory och IMiddleware som utökningspunkt för aktivering av mellanprogram med en container från tredje part. Introduktionsinformation om IMiddlewareFactory och IMiddlewarefinns i Fabriksbaserad aktivering av mellanprogram i ASP.NET Core.
Visa eller ladda ned exempelkod (hur du laddar ned)
Exempelappen visar aktivering av mellanprogram genom en IMiddlewareFactory implementering, SimpleInjectorMiddlewareFactory. Exemplet använder dependency injection-containern (DI) Simple Injector.
Exemplets implementering av mellanprogram registrerar värdet som tillhandahålls av en frågesträngsparameter (key). Mellanprogrammet använder en inmatad databaskontext (en begränsad tjänst) för att registrera frågesträngsvärdet i en minnesintern databas.
Note
Exempelappen använder Enkel injektor enbart i demonstrationssyfte. Användning av Enkel injektor är inte ett godkännande. Aktiveringsmetoder för mellanmjukvara som beskrivs i dokumentationen för Simple Injector och GitHub-frågor rekommenderas av underhållarna av Simple Injector. Mer information finns i dokumentationen för Simple Injector och GitHub-lagringsplatsen Simple Injector.
IMiddlewareFactory
IMiddlewareFactory tillhandahåller metoder för att skapa mellanprogram.
I exempelappen implementeras en mellanprogramsfabrik för att skapa en SimpleInjectorActivatedMiddleware instans. Mellanprogramsfabriken använder containern Simple Injector för att lösa mellanprogrammet:
public class SimpleInjectorMiddlewareFactory : IMiddlewareFactory
{
    private readonly Container _container;
    public SimpleInjectorMiddlewareFactory(Container container)
    {
        _container = container;
    }
    public IMiddleware Create(Type middlewareType)
    {
        return _container.GetInstance(middlewareType) as IMiddleware;
    }
    public void Release(IMiddleware middleware)
    {
        // The container is responsible for releasing resources.
    }
}
IMiddleware
IMiddleware definierar mellanprogram för appens pipeline för begäranden.
Mellanprogram som aktiveras av en IMiddlewareFactory implementering (Middleware/SimpleInjectorActivatedMiddleware.cs):
public class SimpleInjectorActivatedMiddleware : IMiddleware
{
    private readonly AppDbContext _db;
    public SimpleInjectorActivatedMiddleware(AppDbContext db)
    {
        _db = db;
    }
    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        var keyValue = context.Request.Query["key"];
        if (!string.IsNullOrWhiteSpace(keyValue))
        {
            _db.Add(new Request()
                {
                    DT = DateTime.UtcNow, 
                    MiddlewareActivation = "SimpleInjectorActivatedMiddleware", 
                    Value = keyValue
                });
            await _db.SaveChangesAsync();
        }
        await next(context);
    }
}
Ett tillägg skapas för mellanprogrammet (Middleware/MiddlewareExtensions.cs):
public static class MiddlewareExtensions
{
    public static IApplicationBuilder UseSimpleInjectorActivatedMiddleware(
        this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<SimpleInjectorActivatedMiddleware>();
    }
}
              Startup.ConfigureServices måste utföra flera uppgifter:
- Konfigurera containern Simple Injector.
- Registrera fabriken och mellanprogrammet.
- Gör appens databaskontext tillgänglig från containern Simple Injector.
public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    // Replace the default middleware factory with the 
    // SimpleInjectorMiddlewareFactory.
    services.AddTransient<IMiddlewareFactory>(_ =>
    {
        return new SimpleInjectorMiddlewareFactory(_container);
    });
    // Wrap ASP.NET Core requests in a Simple Injector execution 
    // context.
    services.UseSimpleInjectorAspNetRequestScoping(_container);
    // Provide the database context from the Simple 
    // Injector container whenever it's requested from 
    // the default service container.
    services.AddScoped<AppDbContext>(provider => 
        _container.GetInstance<AppDbContext>());
    _container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
    _container.Register<AppDbContext>(() => 
    {
        var optionsBuilder = new DbContextOptionsBuilder<DbContext>();
        optionsBuilder.UseInMemoryDatabase("InMemoryDb");
        return new AppDbContext(optionsBuilder.Options);
    }, Lifestyle.Scoped);
    _container.Register<SimpleInjectorActivatedMiddleware>();
    _container.Verify();
}
Mellanprogrammet registreras i pipelinen för bearbetning av begäran i Startup.Configure:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }
    app.UseSimpleInjectorActivatedMiddleware();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}
Den här artikeln visar hur du använder IMiddlewareFactory och IMiddleware som utökningspunkt för aktivering av mellanprogram med en container från tredje part. Introduktionsinformation om IMiddlewareFactory och IMiddlewarefinns i Fabriksbaserad aktivering av mellanprogram i ASP.NET Core.
Visa eller ladda ned exempelkod (hur du laddar ned)
Exempelappen visar aktivering av mellanprogram genom en IMiddlewareFactory implementering, SimpleInjectorMiddlewareFactory. Exemplet använder dependency injection-containern (DI) Simple Injector.
Exemplets implementering av mellanprogram registrerar värdet som tillhandahålls av en frågesträngsparameter (key). Mellanprogrammet använder en inmatad databaskontext (en begränsad tjänst) för att registrera frågesträngsvärdet i en minnesintern databas.
Note
Exempelappen använder Enkel injektor enbart i demonstrationssyfte. Användning av Enkel injektor är inte ett godkännande. Aktiveringsmetoder för mellanmjukvara som beskrivs i dokumentationen för Simple Injector och GitHub-frågor rekommenderas av underhållarna av Simple Injector. Mer information finns i dokumentationen för Simple Injector och GitHub-lagringsplatsen Simple Injector.
IMiddlewareFactory
IMiddlewareFactory tillhandahåller metoder för att skapa mellanprogram.
I exempelappen implementeras en mellanprogramsfabrik för att skapa en SimpleInjectorActivatedMiddleware instans. Mellanprogramsfabriken använder containern Simple Injector för att lösa mellanprogrammet:
public class SimpleInjectorMiddlewareFactory : IMiddlewareFactory
{
    private readonly Container _container;
    public SimpleInjectorMiddlewareFactory(Container container)
    {
        _container = container;
    }
    public IMiddleware Create(Type middlewareType)
    {
        return _container.GetInstance(middlewareType) as IMiddleware;
    }
    public void Release(IMiddleware middleware)
    {
        // The container is responsible for releasing resources.
    }
}
IMiddleware
IMiddleware definierar mellanprogram för appens pipeline för begäranden.
Mellanprogram som aktiveras av en IMiddlewareFactory implementering (Middleware/SimpleInjectorActivatedMiddleware.cs):
public class SimpleInjectorActivatedMiddleware : IMiddleware
{
    private readonly AppDbContext _db;
    public SimpleInjectorActivatedMiddleware(AppDbContext db)
    {
        _db = db;
    }
    public async Task InvokeAsync(HttpContext context, RequestDelegate next)
    {
        var keyValue = context.Request.Query["key"];
        if (!string.IsNullOrWhiteSpace(keyValue))
        {
            _db.Add(new Request()
                {
                    DT = DateTime.UtcNow, 
                    MiddlewareActivation = "SimpleInjectorActivatedMiddleware", 
                    Value = keyValue
                });
            await _db.SaveChangesAsync();
        }
        await next(context);
    }
}
Ett tillägg skapas för mellanprogrammet (Middleware/MiddlewareExtensions.cs):
public static class MiddlewareExtensions
{
    public static IApplicationBuilder UseSimpleInjectorActivatedMiddleware(
        this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<SimpleInjectorActivatedMiddleware>();
    }
}
              Startup.ConfigureServices måste utföra flera uppgifter:
- Konfigurera containern Simple Injector.
- Registrera fabriken och mellanprogrammet.
- Gör appens databaskontext tillgänglig från containern Simple Injector.
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    // Replace the default middleware factory with the 
    // SimpleInjectorMiddlewareFactory.
    services.AddTransient<IMiddlewareFactory>(_ =>
    {
        return new SimpleInjectorMiddlewareFactory(_container);
    });
    // Wrap ASP.NET Core requests in a Simple Injector execution 
    // context.
    services.UseSimpleInjectorAspNetRequestScoping(_container);
    // Provide the database context from the Simple 
    // Injector container whenever it's requested from 
    // the default service container.
    services.AddScoped<AppDbContext>(provider => 
        _container.GetInstance<AppDbContext>());
    _container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
    _container.Register<AppDbContext>(() => 
    {
        var optionsBuilder = new DbContextOptionsBuilder<DbContext>();
        optionsBuilder.UseInMemoryDatabase("InMemoryDb");
        return new AppDbContext(optionsBuilder.Options);
    }, Lifestyle.Scoped);
    _container.Register<SimpleInjectorActivatedMiddleware>();
    _container.Verify();
}
Mellanprogrammet registreras i pipelinen för bearbetning av begäran i Startup.Configure:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }
    app.UseSimpleInjectorActivatedMiddleware();
    app.UseStaticFiles();
    app.UseMvc();
}
Ytterligare resurser
ASP.NET Core