Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
W tym artykule pokazano, jak używać IMiddlewareFactory oprogramowania pośredniczącego i IMiddleware jako punktu rozszerzalności dla aktywacji oprogramowania pośredniczącego z kontenerem innej firmy. Aby uzyskać informacje wprowadzające na temat IMiddlewareFactory
systemów i IMiddleware
, zobacz Aktywacja oprogramowania pośredniczącego opartego na fabryce w programie ASP.NET Core.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Przykładowa aplikacja demonstruje aktywację oprogramowania pośredniczącego przez implementację IMiddlewareFactory
SimpleInjectorMiddlewareFactory
. W przykładzie użyto kontenera wstrzykiwania zależności simple injector (DI).
Implementacja oprogramowania pośredniczącego przykładu rejestruje wartość podaną przez parametr ciągu zapytania (key
). Oprogramowanie pośredniczące używa wstrzykiwanego kontekstu bazy danych (usługi o określonym zakresie) do rejestrowania wartości ciągu zapytania w bazie danych w pamięci.
Uwaga
Przykładowa aplikacja używa prostego wstrzykiwacza wyłącznie do celów demonstracyjnych. Użycie prostego wstrzykiwacza nie jest poparciem. Metody aktywacji oprogramowania pośredniczącego opisane w dokumentacji prostego wstrzykiwania i problemy z usługą GitHub są zalecane przez osoby odpowiedzialne za prosty wstrzykiwacz. Aby uzyskać więcej informacji, zobacz dokumentację Simple Injector i repozytorium GitHub Simple Injector.
IMiddlewareFactory
IMiddlewareFactory Udostępnia metody tworzenia oprogramowania pośredniczącego.
W przykładowej aplikacji zaimplementowano fabrykę oprogramowania pośredniczącego w celu utworzenia SimpleInjectorActivatedMiddleware
wystąpienia. Fabryka oprogramowania pośredniczącego używa kontenera Simple Injector do rozwiązywania problemów z oprogramowaniem pośredniczącym:
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 definiuje oprogramowanie pośredniczące dla potoku żądania aplikacji.
Oprogramowanie pośredniczące aktywowane przez implementację 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);
}
}
Rozszerzenie jest tworzone dla oprogramowania pośredniczącego (Middleware/MiddlewareExtensions.cs
):
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseSimpleInjectorActivatedMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<SimpleInjectorActivatedMiddleware>();
}
}
Startup.ConfigureServices
musi wykonywać kilka zadań:
- Skonfiguruj kontener Simple Injector.
- Zarejestruj fabrykę i oprogramowanie pośredniczące.
- Udostępnij kontekst bazy danych aplikacji z kontenera 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();
}
Oprogramowanie pośredniczące jest zarejestrowane w potoku przetwarzania żądań w programie 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();
});
}
W tym artykule pokazano, jak używać IMiddlewareFactory oprogramowania pośredniczącego i IMiddleware jako punktu rozszerzalności dla aktywacji oprogramowania pośredniczącego z kontenerem innej firmy. Aby uzyskać informacje wprowadzające na temat IMiddlewareFactory
systemów i IMiddleware
, zobacz Aktywacja oprogramowania pośredniczącego opartego na fabryce w programie ASP.NET Core.
Wyświetl lub pobierz przykładowy kod (jak pobrać)
Przykładowa aplikacja demonstruje aktywację oprogramowania pośredniczącego przez implementację IMiddlewareFactory
SimpleInjectorMiddlewareFactory
. W przykładzie użyto kontenera wstrzykiwania zależności simple injector (DI).
Implementacja oprogramowania pośredniczącego przykładu rejestruje wartość podaną przez parametr ciągu zapytania (key
). Oprogramowanie pośredniczące używa wstrzykiwanego kontekstu bazy danych (usługi o określonym zakresie) do rejestrowania wartości ciągu zapytania w bazie danych w pamięci.
Uwaga
Przykładowa aplikacja używa prostego wstrzykiwacza wyłącznie do celów demonstracyjnych. Użycie prostego wstrzykiwacza nie jest poparciem. Metody aktywacji oprogramowania pośredniczącego opisane w dokumentacji prostego wstrzykiwania i problemy z usługą GitHub są zalecane przez osoby odpowiedzialne za prosty wstrzykiwacz. Aby uzyskać więcej informacji, zobacz dokumentację Simple Injector i repozytorium GitHub Simple Injector.
IMiddlewareFactory
IMiddlewareFactory Udostępnia metody tworzenia oprogramowania pośredniczącego.
W przykładowej aplikacji zaimplementowano fabrykę oprogramowania pośredniczącego w celu utworzenia SimpleInjectorActivatedMiddleware
wystąpienia. Fabryka oprogramowania pośredniczącego używa kontenera Simple Injector do rozwiązywania problemów z oprogramowaniem pośredniczącym:
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 definiuje oprogramowanie pośredniczące dla potoku żądania aplikacji.
Oprogramowanie pośredniczące aktywowane przez implementację 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);
}
}
Rozszerzenie jest tworzone dla oprogramowania pośredniczącego (Middleware/MiddlewareExtensions.cs
):
public static class MiddlewareExtensions
{
public static IApplicationBuilder UseSimpleInjectorActivatedMiddleware(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<SimpleInjectorActivatedMiddleware>();
}
}
Startup.ConfigureServices
musi wykonywać kilka zadań:
- Skonfiguruj kontener Simple Injector.
- Zarejestruj fabrykę i oprogramowanie pośredniczące.
- Udostępnij kontekst bazy danych aplikacji z kontenera 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();
}
Oprogramowanie pośredniczące jest zarejestrowane w potoku przetwarzania żądań w programie Startup.Configure
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseSimpleInjectorActivatedMiddleware();
app.UseStaticFiles();
app.UseMvc();
}