如何使用“IWebHostEnvironment"ASP Core 中的静态类内部 [英] How to use "IWebHostEnvironment" inside static class in ASP Core

查看:11
本文介绍了如何使用“IWebHostEnvironment"ASP Core 中的静态类内部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法使用IWebHostEnvironment"?在 ASP Core 中的静态类中?

Is there a way to use "IWebHostEnvironment" inside static class in ASP Core?

我的班级:

public class MainHelper
{
    private readonly IWebHostEnvironment _hostingEnvironment;

    public MainHelper(IWebHostEnvironment hostingEnvironment)
    {
        _hostingEnvironment = hostingEnvironment;
    }    

    public static void SaveFile(IFormFile file)
    {
            var path = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);

            using (var fileStream = System.IO.File.Create(Path.Combine(path, file.FileName)))
            {
                file.CopyTo(fileStream);
            }
    }
}

我有错误:

var path = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");

错误: c# session 非静态字段方法或属性MainHelper._hostingEnvironment"需要对象引用

Error: c# session an object reference is required for the non-static field method or property 'MainHelper._hostingEnvironment'

请多多指教

推荐答案

也许这样的事情可以帮助您:

Maybe something like that can help you:

public static class MainHelper
{
    private static IWebHostEnvironment _hostingEnvironment;

    public static bool IsInitialized { get; private set; }

    public static void Initialize(IWebHostEnvironment hostEnvironment)
    {
        if(IsInitialized)
            throw new InvalidOperationException("Object already initialized");
        
        _hostingEnvironment = hostEnvironment;
        IsInitialized = true;
    }

    public static void SaveFile(IFormFile file)
    {
        if(!IsInitialized)
            throw new InvalidOperationException("Object is not initialized");

        var path = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
        if (!Directory.Exists(path))
            Directory.CreateDirectory(path);

        using (var fileStream = System.IO.File.Create(Path.Combine(path, file.FileName)))
        {
            file.CopyTo(fileStream);
        }
    }
}

在此示例中,您应该使用 IWebHostEnvironment 实例在 Startup.cs 等处调用 MainHelper.Initialize,而不是调用构造函数.在此示例中,您只需初始化一次 MainHelper.(未测试)

It this sample you should call MainHelper.Initialize with your IWebHostEnvironment instance at your Startup.cs, etc. instead calling constructor. In this sample you can initialize MainHelper just once. (Not tested)

这篇关于如何使用“IWebHostEnvironment"ASP Core 中的静态类内部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆