在我的net 7应用程序中,有没有办法在我的规则中利用内置的IOC容器(实现了IRule),或者我必须在从容器注册它时求助于手动注入它的依赖项?这就是我现在的工作:
app.UseRewriter(new RewriteOptions().Add(new MyRyle()));
我所追求的是这样的东西,所以我不必亲自修改规则:
app.UseRewriter(new RewriteOptions().Add<MyRule>())
如果这不起作用,也许有一种方法可以做财产注入?
snz8szmq1#
默认的MS DI容器不支持属性注入(it's not good design),但是我们可以想出一个比这更好的策略。您可以创建并绑定一个服务来收集所有规则并返回RewriteOptions。由于您的应用已经构建,因此可以从容器解析。生成Web应用时添加新服务和所有规则。
RewriteOptions
builder.Services.AddTransient<IRule, MyRule>(); builder.Services.AddTransient<IRewriteOptionsBuilder, RewriteOptionsBuilder>();
然后在配置重写时解析构建器。
app.UseRewriter(app.Services.GetRequiredService<IRewriteOptionsBuilder>().Build())
重写生成器
public interface IRewriteOptionsBuilder { RewriteOptions Build(); } class RewriteOptionsBuilder : IRewriteOptionsBuilder { private readonly IEnumerable<IRule> _rewriteRules; public RewriteOptionsBuilder(IEnumerable<IRule> rewriteRules) { _rewriteRules = rewriteRules; } public RewriteOptions Build() { var options = new RewriteOptions(); foreach (IRule rule in _rewriteRules) { options.Add(rule); } return options; } }
1条答案
按热度按时间snz8szmq1#
默认的MS DI容器不支持属性注入(it's not good design),但是我们可以想出一个比这更好的策略。
您可以创建并绑定一个服务来收集所有规则并返回
RewriteOptions
。由于您的应用已经构建,因此可以从容器解析。生成Web应用时添加新服务和所有规则。
然后在配置重写时解析构建器。
重写生成器