![](/img/trans.png)
[英]How to override and interface and call "base" interface in ASP.NET Core built-in DI container?
[英]Per-request scope with ASP.NET 5 and built-in DI container
我正在调查ASP.NET 5中的DI主题,我遇到了这样的问题 - 我不明白如何为每个请求创建一个新的服务实例。
我用的代码是:
services.AddScoped<ValueStore>();
在我的中间件中,我抓住了价值:
var someValueStore = app.ApplicationServices.GetService<ValueStore>();
完整代码可在此处获得
我的问题是:虽然我希望在每个请求上更新此服务,但它不会发生,并且它的行为就像注册为AddSingleton()
。
我做错了吗?
app.ApplicationServices
不提供请求范围的IServiceProvider
。 当您使用GetService<>()
时,它将返回ValueStore
的单例实例。 你有两个选择:
使用HttpContext.RequestServices
:
var someValueStore = context.RequestServices.GetService<ValueStore>();
或者在中间件的Invoke
方法中注入ValueStore
:
public async Task Invoke(HttpContext httpContext, ValueStore valueStore)
{
await httpContext.Response.WriteAsync($"Random value = {valueStore.SomeValue}");
await _next(httpContext);
}
我克隆了你的回购,这很有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.