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