You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 7中IRule的依赖注入:如何利用内置IOC容器?

在.NET 7中实现IRule的规则类依赖注入方案

1. 直接使用Add<MyRule>()的可行性

默认RewriteOptions并未提供泛型的Add<T>方法来从IOC容器中自动解析规则实例,所以你期望的app.UseRewriter(new RewriteOptions().Add<MyRule>())写法原生不支持,需要通过扩展方案实现依赖注入需求。

2. 利用内置IOC容器注入依赖的正确方式

要让MyRule类能通过内置容器注入依赖,需按以下步骤操作:

步骤1:将规则类注册到DI容器

在Program.cs的服务配置阶段,把你的MyRule注册为服务(根据业务需求选择合适的生命周期):

builder.Services.AddScoped<MyRule>();
// 可选:AddSingleton/AddTransient,对应不同的实例生命周期

步骤2:从容器解析实例并添加到RewriteOptions

在中间件配置阶段,容器已构建完成,可通过app.Services获取服务提供者来解析规则实例:

var myRule = app.Services.GetRequiredService<MyRule>();
app.UseRewriter(new RewriteOptions().Add(myRule));

如果有多个实现IRule的规则类,可批量获取并添加:

var allRules = app.Services.GetServices<IRule>();
var rewriteOptions = new RewriteOptions();
foreach (var rule in allRules)
{
    rewriteOptions.Add(rule);
}
app.UseRewriter(rewriteOptions);

3. 属性注入的实现途径

ASP.NET Core默认DI容器原生不支持属性注入,若要使用属性注入,有两种可选方案:

  • 切换到支持属性注入的第三方DI容器(如Autofac),配置属性注入规则后,再按上述方式从容器解析MyRule,容器会自动完成属性依赖的注入。
  • 手动实现属性注入:在解析MyRule实例后,自行从容器中获取依赖并赋值给类的属性,但这种方式代码冗余且不够优雅,不推荐使用。

内容的提问来源于stack exchange,提问作者Johan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:47:07