如何在Asp.net核心中获取静态类或IEnumerable中的根文件夹路径?

时间:2019-08-02 10:32:22

标签: asp.net-core

我想在静态类中获取项目的根文件夹路径。我尝试了很多代码,但没有得到任何解决方案。在控制器中,我正在使用IHostingEnvironment接口获取根路径。可以在静态类中获取文件夹路径吗?

1 个答案:

答案 0 :(得分:0)

不。这是不可能的。它位于必须注入的IHostingEnvironment中。静态类不能被注入,所以您很不走运。通常,应避免使用静态变量,而在使用依赖项注入时应尤其。两种方法截然相反。

相反,您可以创建具有单例寿命的类。这为您带来了静态的“全局”性质,因为在应用程序的整个生命周期中,静态变量都可用于应用程序的所有部分,并且您可以实际将其注入其中。

public class MySingleton
{
    private readonly IHostingEnvironment _env;

    public MySingleton(IHostingEnvironment env)
    {
        _env = env;
    }

    ...
}

然后在ConfigureServices中将其注册为单例:

services.AddSingleton<MySingleton>();

请注意,您也可以在此处直接注入IHostingEnvironment,因为它也是单例。对于其他不在单例范围内的事情,例如DbContext,您将需要使用service-locator模式,在其中注入IServiceProvider,然后按照以下步骤进行操作:

public void MethodThatUsesContext()
{
    using (var scope = _serviceProvider.CreateScope())
    {
        var context = scope.ServiceProvider.GetRequiredService<MyContext>();
        // do something with context
    }
}