【问题标题】:how to get root folder path in static class or IEnumerable in Asp.net core?如何在 Asp.net 核心中获取静态类或 IEnumerable 中的根文件夹路径?
【发布时间】:2019-08-02 21:37:25
【问题描述】:

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

【问题讨论】:

  • 你尝试了什么?请在问题中插入您的code!没有它,就很难帮你...
  • IMO,你应该避免在 asp.net 核心中使用静态类。如果你坚持,可以考虑在Startup.cs中设置静态类文件夹路径。
  • @Edward 那么扩展方法呢?我会使用静态Directory.GetCurrentDirectory()

标签: asp.net-core


【解决方案1】:

没有。这是不可能的。它位于必须注入的IHostingEnvironment 中。静态类不能被注入,所以你不走运。一般来说,你应该避免静态,尤其是在使用依赖注入时。这两种方法是截然相反的。

相反,您可以创建一个具有单例生命周期的类。这为您购买了静态的“全局”性质,因为它将在应用程序的整个生命周期内可供应用程序的所有部分使用,并且您可以实际注入其中。

public class MySingleton
{
    private readonly IHostingEnvironment _env;

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

    ...
}

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

services.AddSingleton<MySingleton>();

注意,你可以在这里直接注入IHostingEnvironment,因为它也是一个单例。对于不在单例范围内的其他内容,例如DbContext,您需要使用服务定位器模式,您将在其中注入IServiceProvider,然后执行以下操作:

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

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 2012-12-13
    • 2019-06-08
    相关资源
    最近更新 更多