访问ConfigureServices中的IApplicationEnvironment

Rai*_*ner 5 c# asp.net-core

在我的ConfigureServices方法中,我想读取一个文件(在我的例子中是用于签署令牌的证书,但它可以是设置服务所需的任何文件).因此我需要知道ApplicationBasePath来自IApplicationEnvironment.

目前我通过获取这样的IApplicationEnvironment服务来解决问题:

public void ConfigureServices(IServiceCollection services)
{
    ...
    string basePath;
    var serviceProvider = services.BuildServiceProvider();
    try
    {
        basePath = serviceProvider.GetRequiredService<IApplicationEnvironment>().ApplicationBasePath;
    }
    finally
    {
        (serviceProvider as IDisposable)?.Dispose();
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但我不确定这是否是正确的方法.所以我的问题是:

  1. 有没有更好的方法来读取文件ConfigureServices
  2. 是否有更好的方法来获取应用程序基础路径ConfigureServices
  3. 如果我的方法是正确的,我能IDisposable正确处理吗?

Hen*_*ema 12

运行时允许在Startup类的构造函数中注入依赖项:

public class Startup
{
    private readonly IApplicationEnvironment _appEnv;

    public Startup(IApplicationEnvironment appEnv)
    {
        _appEnv = appEnv;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        string basePath = _appEnv.ApplicationBasePath;
    }
}
Run Code Online (Sandbox Code Playgroud)