我有一个简单的服务,包含一个List<Foo>.在Startup.cs中,我正在使用该services.addScoped<Foo, Foo>()方法.
我在两个不同的地方(控制器和中间件)注入服务实例,对于单个请求,我希望得到相同的实例.但是,这似乎并没有发生.
即使我在Controller Action中向List中添加Foo,中间件中的Foo列表也始终为空.为什么是这样?
我已经尝试将服务注册更改为单例,使用AddSingleton()它并按预期工作.但是,这必须限制在当前请求范围内.非常感谢任何帮助或想法!
FooService.cs
public class FooService
{
public List<Foo> Foos = new List<Foo>();
}
Run Code Online (Sandbox Code Playgroud)
Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<FooService, FooService>();
}
Run Code Online (Sandbox Code Playgroud)
[以下是我注入服务的两个地方,导致两个不同的实例]
MyController.cs
public class MyController : Controller
{
public MyController(FooService fooService)
{
this.fooService = fooService;
}
[HttpPost]
public void TestAddFoo()
{
//add foo to List
this.fooService.Foos.Add(new Foo());
}
}
Run Code Online (Sandbox Code Playgroud)
FooMiddleware.cs
public AppMessageMiddleware(RequestDelegate next, IServiceProvider serviceProvider)
{
this.next = next;
this.serviceProvider = serviceProvider;
}
public async …Run Code Online (Sandbox Code Playgroud) c# dependency-injection .net-core asp.net-core asp.net-core-2.0