相关疑难解决方法(0)

ApplicationServices 解析网络核心中不同范围的实例?

我使用 .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)

c# dependency-injection .net-core asp.net-core

5
推荐指数
1
解决办法
6467
查看次数