我使用 .net core 3.1 进行以下配置:
public interface IFoo
{
public void Work();
}
public class Foo : IFoo
{
readonly string MyGuid;
public Foo()
{
MyGuid = Guid.NewGuid().ToString();
}
public void Work() { Console.WriteLine(MyGuid); }
}
Run Code Online (Sandbox Code Playgroud)
这是配置:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IFoo, Foo>();
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IFoo foo, IServiceProvider myServiceProvider)
{
Console.WriteLine("Via ApplicationServices");
app.ApplicationServices.GetService<IFoo>().Work();
Console.WriteLine("Via IServiceProvider");
myServiceProvider.GetService<IFoo>().Work();
Console.WriteLine("Via IFoo injection");
foo.Work();
}
Run Code Online (Sandbox Code Playgroud)
结果是:
通过ApplicationServices 27e61428-2adf-4ffa-b27a-485b9c45471d <----不同
通过IServiceProvider c9e86865-2eeb-44db-b625-312f92533beb
通过IFoo注入c9e86865-2eeb-44db-b625-312f92533beb
更多,在控制器操作中,如果我使用IserviceProvider:
[HttpGet]
public …Run Code Online (Sandbox Code Playgroud)