ASP.NET Core'da fabrika tabanlı ara yazılım etkinleştirmesi
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
IMiddlewareFactory/IMiddleware, ara yazılım etkinleştirmesi için aşağıdaki avantajları sunan bir genişletilebilirlik noktasıdır:
- İstemci isteği başına etkinleştirme (kapsamlı hizmetlerin eklenmesi)
- Güçlü ara yazılım yazma
UseMiddleware uzantı yöntemleri, ara yazılımların kayıtlı türünün uygulamasının olup IMiddlewareolmadığını denetler. Bu durumda kapsayıcıya IMiddlewareFactory kaydedilen örnek, kural tabanlı ara yazılım etkinleştirme mantığını kullanmak yerine uygulamayı çözümlemek IMiddleware için kullanılır. Ara yazılım, uygulamanın hizmet kapsayıcısında kapsamlı veya geçici bir hizmet olarak kaydedilir.
IMiddleware istemci isteği (bağlantı) başına etkinleştirildiğinden, kapsamı belirlenmiş hizmetler ara yazılımının oluşturucusuna eklenebilir.
IMiddleware
IMiddleware uygulamanın istek işlem hattı için ara yazılımı tanımlar. InvokeAsync(HttpContext, RequestDelegate) yöntemi istekleri işler ve ara yazılımının yürütülmesini temsil eden bir Task döndürür.
Kural tarafından etkinleştirilen ara yazılım:
public class ConventionalMiddleware
{
private readonly RequestDelegate _next;
public ConventionalMiddleware(RequestDelegate next)
=> _next = next;
public async Task InvokeAsync(HttpContext context, SampleDbContext dbContext)
{
var keyValue = context.Request.Query["key"];
if (!string.IsNullOrWhiteSpace(keyValue))
{
dbContext.Requests.Add(new Request("Conventional", keyValue));
await dbContext.SaveChangesAsync();
}
await _next(context);
}
}
tarafından MiddlewareFactoryetkinleştirilen ara yazılım:
public class FactoryActivatedMiddleware : IMiddleware
{
private readonly SampleDbContext _dbContext;
public FactoryActivatedMiddleware(SampleDbContext dbContext)
=> _dbContext = dbContext;
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
var keyValue = context.Request.Query["key"];
if (!string.IsNullOrWhiteSpace(keyValue))
{
_dbContext.Requests.Add(new Request("Factory", keyValue));
await _dbContext.SaveChangesAsync();
}
await next(context);
}
}
Ara yazılım için uzantılar oluşturulur:
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseConventionalMiddleware(
this IApplicationBuilder app)
=> app.UseMiddleware<ConventionalMiddleware>();
public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder app)
=> app.UseMiddleware<FactoryActivatedMiddleware>();
}
ile UseMiddlewarenesneleri fabrika tarafından etkinleştirilen ara yazılıma geçirmek mümkün değildir:
public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder app, bool option)
{
// Passing 'option' as an argument throws a NotSupportedException at runtime.
return app.UseMiddleware<FactoryActivatedMiddleware>(option);
}
Fabrika tarafından etkinleştirilen ara yazılım, içindeki Program.cs
yerleşik kapsayıcıya eklenir:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<SampleDbContext>
(options => options.UseInMemoryDatabase("SampleDb"));
builder.Services.AddTransient<FactoryActivatedMiddleware>();
Her iki ara yazılım da içinde istek işleme işlem hattına Program.cs
kaydedilir:
var app = builder.Build();
app.UseConventionalMiddleware();
app.UseFactoryActivatedMiddleware();
IMiddlewareFactory
IMiddlewareFactory ara yazılım oluşturmak için yöntemler sağlar. Ara yazılım fabrikası uygulaması kapsayıcıya kapsamlı bir hizmet olarak kaydedilir.
Varsayılan IMiddlewareFactory uygulama olan MiddlewareFactory, Microsoft.AspNetCore.Http paketinde bulunur.
Ek kaynaklar
IMiddlewareFactory/IMiddlewareara yazılım etkinleştirme için bir genişletilebilirlik noktasıdır.
UseMiddleware uzantı yöntemleri, ara yazılımların kayıtlı türünün uygulamasının olup IMiddlewareolmadığını denetler. Bu durumda kapsayıcıya IMiddlewareFactory kaydedilen örnek, kural tabanlı ara yazılım etkinleştirme mantığını kullanmak yerine uygulamayı çözümlemek IMiddleware için kullanılır. Ara yazılım, uygulamanın hizmet kapsayıcısında kapsamlı veya geçici bir hizmet olarak kaydedilir.
Avantajlar:
- İstemci isteği başına etkinleştirme (kapsamlı hizmetlerin eklenmesi)
- Güçlü ara yazılım yazma
IMiddleware istemci isteği (bağlantı) başına etkinleştirildiğinden, kapsamı belirlenmiş hizmetler ara yazılımının oluşturucusuna eklenebilir.
Örnek kodu görüntüleme veya indirme (indirme)
IMiddleware
IMiddleware uygulamanın istek işlem hattı için ara yazılımı tanımlar. InvokeAsync(HttpContext, RequestDelegate) yöntemi istekleri işler ve ara yazılımının yürütülmesini temsil eden bir Task döndürür.
Kural tarafından etkinleştirilen ara yazılım:
public class ConventionalMiddleware
{
private readonly RequestDelegate _next;
public ConventionalMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context, AppDbContext db)
{
var keyValue = context.Request.Query["key"];
if (!string.IsNullOrWhiteSpace(keyValue))
{
db.Add(new Request()
{
DT = DateTime.UtcNow,
MiddlewareActivation = "ConventionalMiddleware",
Value = keyValue
});
await db.SaveChangesAsync();
}
await _next(context);
}
}
tarafından MiddlewareFactoryetkinleştirilen ara yazılım:
public class FactoryActivatedMiddleware : IMiddleware
{
private readonly AppDbContext _db;
public FactoryActivatedMiddleware(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 = "FactoryActivatedMiddleware",
Value = keyValue
});
await _db.SaveChangesAsync();
}
await next(context);
}
}
Ara yazılım için uzantılar oluşturulur:
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseConventionalMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<ConventionalMiddleware>();
}
public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<FactoryActivatedMiddleware>();
}
}
ile UseMiddlewarenesneleri fabrika tarafından etkinleştirilen ara yazılıma geçirmek mümkün değildir:
public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder builder, bool option)
{
// Passing 'option' as an argument throws a NotSupportedException at runtime.
return builder.UseMiddleware<FactoryActivatedMiddleware>(option);
}
Fabrika tarafından etkinleştirilen ara yazılım, içindeki Startup.ConfigureServices
yerleşik kapsayıcıya eklenir:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
options.UseInMemoryDatabase("InMemoryDb"));
services.AddTransient<FactoryActivatedMiddleware>();
services.AddRazorPages();
}
Her iki ara yazılım da içindeki istek işleme işlem hattına Startup.Configure
kaydedilir:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseConventionalMiddleware();
app.UseFactoryActivatedMiddleware();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
IMiddlewareFactory
IMiddlewareFactory ara yazılım oluşturmak için yöntemler sağlar. Ara yazılım fabrikası uygulaması kapsayıcıya kapsamlı bir hizmet olarak kaydedilir.
Varsayılan IMiddlewareFactory uygulama olan MiddlewareFactory, Microsoft.AspNetCore.Http paketinde bulunur.
Ek kaynaklar
IMiddlewareFactory/IMiddlewareara yazılım etkinleştirme için bir genişletilebilirlik noktasıdır.
UseMiddleware uzantı yöntemleri, ara yazılımların kayıtlı türünün uygulamasının olup IMiddlewareolmadığını denetler. Bu durumda kapsayıcıya IMiddlewareFactory kaydedilen örnek, kural tabanlı ara yazılım etkinleştirme mantığını kullanmak yerine uygulamayı çözümlemek IMiddleware için kullanılır. Ara yazılım, uygulamanın hizmet kapsayıcısında kapsamlı veya geçici bir hizmet olarak kaydedilir.
Avantajlar:
- İstemci isteği başına etkinleştirme (kapsamlı hizmetlerin eklenmesi)
- Güçlü ara yazılım yazma
IMiddleware istemci isteği (bağlantı) başına etkinleştirildiğinden, kapsamı belirlenmiş hizmetler ara yazılımının oluşturucusuna eklenebilir.
Örnek kodu görüntüleme veya indirme (indirme)
IMiddleware
IMiddleware uygulamanın istek işlem hattı için ara yazılımı tanımlar. InvokeAsync(HttpContext, RequestDelegate) yöntemi istekleri işler ve ara yazılımının yürütülmesini temsil eden bir Task döndürür.
Kural tarafından etkinleştirilen ara yazılım:
public class ConventionalMiddleware
{
private readonly RequestDelegate _next;
public ConventionalMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context, AppDbContext db)
{
var keyValue = context.Request.Query["key"];
if (!string.IsNullOrWhiteSpace(keyValue))
{
db.Add(new Request()
{
DT = DateTime.UtcNow,
MiddlewareActivation = "ConventionalMiddleware",
Value = keyValue
});
await db.SaveChangesAsync();
}
await _next(context);
}
}
tarafından MiddlewareFactoryetkinleştirilen ara yazılım:
public class FactoryActivatedMiddleware : IMiddleware
{
private readonly AppDbContext _db;
public FactoryActivatedMiddleware(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 = "FactoryActivatedMiddleware",
Value = keyValue
});
await _db.SaveChangesAsync();
}
await next(context);
}
}
Ara yazılım için uzantılar oluşturulur:
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseConventionalMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<ConventionalMiddleware>();
}
public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<FactoryActivatedMiddleware>();
}
}
ile UseMiddlewarenesneleri fabrika tarafından etkinleştirilen ara yazılıma geçirmek mümkün değildir:
public static IApplicationBuilder UseFactoryActivatedMiddleware(
this IApplicationBuilder builder, bool option)
{
// Passing 'option' as an argument throws a NotSupportedException at runtime.
return builder.UseMiddleware<FactoryActivatedMiddleware>(option);
}
Fabrika tarafından etkinleştirilen ara yazılım, içindeki Startup.ConfigureServices
yerleşik kapsayıcıya eklenir:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
options.UseInMemoryDatabase("InMemoryDb"));
services.AddTransient<FactoryActivatedMiddleware>();
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Her iki ara yazılım da içindeki istek işleme işlem hattına Startup.Configure
kaydedilir:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseConventionalMiddleware();
app.UseFactoryActivatedMiddleware();
app.UseStaticFiles();
app.UseMvc();
}
IMiddlewareFactory
IMiddlewareFactory ara yazılım oluşturmak için yöntemler sağlar. Ara yazılım fabrikası uygulaması kapsayıcıya kapsamlı bir hizmet olarak kaydedilir.
Varsayılan IMiddlewareFactory uygulama olan MiddlewareFactory, Microsoft.AspNetCore.Http paketinde bulunur.
Ek kaynaklar
ASP.NET Core