ASP.NET 5和内置DI容器的每请求范围

时间:2015-11-09 15:34:23

标签: c# asp.net asp.net-core

我正在调查ASP.NET 5中的DI主题,我遇到了这样的问题 - 我不明白如何为每个请求创建一个新的服务实例。

我使用代码:

services.AddScoped<ValueStore>();

在我的中间件中,我抓住了价值:

var someValueStore = app.ApplicationServices.GetService<ValueStore>();

完整代码可用here

我的问题是:虽然我希望每次请求都能续订此服务,但不会发生这种情况,并且其行为就像注册为AddSingleton()一样。

我做错了吗?

1 个答案:

答案 0 :(得分:10)

$(".start-date").eq(i).text(today); 未提供请求范围的app.ApplicationServices。当您使用IServiceProvider时,它将返回ValueStore的单例实例。你有两个选择:

使用GetService<>()

HttpContext.RequestServices

或者在中间件的var someValueStore = context.RequestServices.GetService<ValueStore>(); 方法中注入ValueStore

Invoke

我克隆了你的回购,这很有效。