Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Ez a cikk bemutatja, hogyan használható IMiddlewareFactory és IMiddleware bővíthető pontként a köztesszoftver-aktiváláshoz egy külső tárolóval. A bevezető információkért IMiddlewareFactoryIMiddlewarelásd: Gyári alapú köztes szoftver aktiválása a ASP.NET Core-ban.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
A mintaalkalmazás bemutatja a IMiddlewareFactory implementációval történő köztes szoftver aktiválását SimpleInjectorMiddlewareFactory. A minta a Simple Injector dependency injection (DI) tárolót használja.
A minta köztesszoftver-implementációja egy lekérdezési sztringparaméter (key) által megadott értéket rögzíti. A köztes szoftver egy injektált adatbázis-környezetet (hatókörrel rendelkező szolgáltatást) használ a lekérdezési sztring értékének rögzítéséhez egy memórián belüli adatbázisban.
Note
A mintaalkalmazás a Simple Injectort kizárólag bemutató célokra használja. Az Egyszerű injektor használata nem jóváhagyás. A Simple Injector dokumentációjában leírt köztes szoftveres aktiválási módszereket és a GitHub-problémákat a Simple Injector karbantartói javasolják. További információkért tekintse meg a Simple Injector dokumentációját és a Simple Injector GitHub-adattárat.
IMiddlewareFactory
IMiddlewareFactory metódusokat biztosít a köztes szoftver létrehozásához.
A mintaalkalmazásban egy köztesszoftver-előállító van implementálva egy SimpleInjectorActivatedMiddleware példány létrehozásához. A köztes szoftvergyár az Egyszerű injektor tárolóval oldja fel a köztes szoftvereket:
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 az alkalmazás kérési folyamatának köztes szoftverét határozza meg.
Köztes szoftver, amelyet egy implementáció aktivált IMiddlewareFactory (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);
}
}
Létrejön egy bővítmény a köztes szoftverhez (Middleware/MiddlewareExtensions.cs):
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseSimpleInjectorActivatedMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<SimpleInjectorActivatedMiddleware>();
}
}
Startup.ConfigureServices több feladatot is el kell végeznie:
- Állítsa be az Egyszerű injektor tárolót.
- Regisztrálja a gyárat és a köztes szoftvereket.
- Az alkalmazás adatbázis-környezetének elérhetővé tétele az Egyszerű injektor tárolóból.
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();
}
A köztes szoftver regisztrálva van a kérelemfeldolgozási folyamatban a következő helyen 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();
});
}
Ez a cikk bemutatja, hogyan használható IMiddlewareFactory és IMiddleware bővíthető pontként a köztesszoftver-aktiváláshoz egy külső tárolóval. A bevezető információkért IMiddlewareFactoryIMiddlewarelásd: Gyári alapú köztes szoftver aktiválása a ASP.NET Core-ban.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
A mintaalkalmazás bemutatja a IMiddlewareFactory implementációval történő köztes szoftver aktiválását SimpleInjectorMiddlewareFactory. A minta a Simple Injector dependency injection (DI) tárolót használja.
A minta köztesszoftver-implementációja egy lekérdezési sztringparaméter (key) által megadott értéket rögzíti. A köztes szoftver egy injektált adatbázis-környezetet (hatókörrel rendelkező szolgáltatást) használ a lekérdezési sztring értékének rögzítéséhez egy memórián belüli adatbázisban.
Note
A mintaalkalmazás a Simple Injectort kizárólag bemutató célokra használja. Az Egyszerű injektor használata nem jóváhagyás. A Simple Injector dokumentációjában leírt köztes szoftveres aktiválási módszereket és a GitHub-problémákat a Simple Injector karbantartói javasolják. További információkért tekintse meg a Simple Injector dokumentációját és a Simple Injector GitHub-adattárat.
IMiddlewareFactory
IMiddlewareFactory metódusokat biztosít a köztes szoftver létrehozásához.
A mintaalkalmazásban egy köztesszoftver-előállító van implementálva egy SimpleInjectorActivatedMiddleware példány létrehozásához. A köztes szoftvergyár az Egyszerű injektor tárolóval oldja fel a köztes szoftvereket:
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 az alkalmazás kérési folyamatának köztes szoftverét határozza meg.
Köztes szoftver, amelyet egy implementáció aktivált IMiddlewareFactory (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);
}
}
Létrejön egy bővítmény a köztes szoftverhez (Middleware/MiddlewareExtensions.cs):
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseSimpleInjectorActivatedMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<SimpleInjectorActivatedMiddleware>();
}
}
Startup.ConfigureServices több feladatot is el kell végeznie:
- Állítsa be az Egyszerű injektor tárolót.
- Regisztrálja a gyárat és a köztes szoftvereket.
- Az alkalmazás adatbázis-környezetének elérhetővé tétele az Egyszerű injektor tárolóból.
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();
}
A köztes szoftver regisztrálva van a kérelemfeldolgozási folyamatban a következő helyen Startup.Configure:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseSimpleInjectorActivatedMiddleware();
app.UseStaticFiles();
app.UseMvc();
}