ASP.NET Core 中间件与依赖注入服务配置

在ASP.NET Core应用程序中,中间件和依赖注入服务的配置是构建高效、可维护代码的关键。本文将介绍如何使用扩展方法来配置中间件和依赖注入服务,包括实例类型和函数类型两种模式。

中间件配置

中间件是ASP.NET Core中处理HTTP请求和响应的组件。可以定义一个POCO类来保存中间件的参数,并通过扩展方法将其添加到请求处理管道中。

在实例类型模式中,首先定义一个POCO类来保存中间件的参数,然后创建一个扩展方法,该方法接受一个POCO实例作为参数。

public class GreetingOptions { public string GreetAt { get; set; } public string GreetTo { get; set; } } public class GreetingMiddleware { private readonly RequestDelegate next; private readonly GreetingOptions options; public GreetingMiddleware(RequestDelegate next, GreetingOptions options) { this.next = next; this.options = options; } public async Task Invoke(HttpContext context) { var message = $"Good {this.options.GreetAt} {this.options.GreetTo}"; await context.Response.WriteAsync(message); } } public static IApplicationBuilder UseGreeting(this IApplicationBuilder app, GreetingOptions options) { return app.UseMiddleware(options); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseGreeting(new GreetingOptions { GreetAt = "Morning", GreetTo = "Tahir" }); }

在上述代码中,定义了一个名为GreetingOptions的POCO类,用于保存问候的时间和对象。然后,创建了一个名为GreetingMiddleware的中间件类,它接受一个GreetingOptions实例作为参数。最后,通过一个扩展方法UseGreeting将中间件添加到请求处理管道中。

在函数类型模式中,同样定义一个POCO类来保存中间件的参数,但这次创建一个扩展方法,该方法接受一个函数作为参数,该函数用于配置POCO实例。

public static IApplicationBuilder UseGreeting(this IApplicationBuilder app, Action configureOptions) { var options = new GreetingOptions(); configureOptions(options); return app.UseMiddleware(options); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseGreeting(options => { options.GreetAt = "Morning"; options.GreetTo = "Tahir"; }); }

在上述代码中,通过一个名为UseGreeting的扩展方法,接受一个函数作为参数,该函数用于配置GreetingOptions实例。这种方式提供了更大的灵活性,允许在配置中间件时进行更复杂的操作。

依赖注入服务配置

依赖注入是ASP.NET Core中管理对象生命周期和依赖关系的一种机制。可以使用类似于中间件配置的模式来配置依赖注入服务。

在实例类型模式中,首先定义一个服务类,然后创建一个扩展方法,该方法接受一个服务配置参数实例作为参数。

public class MessageService : IMessageService { private readonly MessageOptions options; public MessageService(MessageOptions options) { this.options = options; } public string FormatMessage(string message) { // use options return this.options.Format == MessageFormat.None ? message : this.options.Format == MessageFormat.Upper ? message.ToUpper() : message.ToLower(); } } public static IServiceCollection AddMessageFormatter(this IServiceCollection services, MessageOptions options) { return services.AddScoped(factory => { return new MessageService(options); }); } public void ConfigureServices(IServiceCollection services) { services.AddMessageFormatter(new MessageOptions { Format = MessageFormat.Lower }); }

在上述代码中,定义了一个名为MessageService的服务类,它接受一个MessageOptions实例作为参数。然后,通过一个名为AddMessageFormatter的扩展方法将服务添加到依赖注入容器中。

在函数类型模式中,同样定义一个服务类,但这次创建一个扩展方法,该方法接受一个函数作为参数,该函数用于配置服务配置参数实例。

public static IServiceCollection AddMessageFormatter(this IServiceCollection services, Action configureOptions) { var options = new MessageOptions(); configureOptions(options); return services.AddScoped(factory => { return new MessageService(options); }); } public void ConfigureServices(IServiceCollection services) { services.AddMessageFormatter(options => { options.Format = MessageFormat.Lower; }); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485