【问题标题】:How can pass a data context to a static method in Asp .Net Core如何将数据上下文传递给 Asp .Net Core 中的静态方法
【发布时间】:2021-03-03 23:31:03
【问题描述】:

我想将 ApplicationContext 传递给静态方法。我尝试了许多不同的方法,但没有任何效果。 我在没有静态的情况下尝试了它等等,上下文总是返回 null。

这是我写的原始代码,但它给出了错误“非静态字段、方法或属性需要对象引用”

public class SelectItemHelper
{
    private readonly ApplicationContext db;

    public SelectItemHelper(ApplicationContext context)
    {
        db = context;
    }

    public static IEnumerable<SelectListItem> GetDeveloper()
    {
        var developer = db.Games.ToList();

        IList<SelectListItem> items = new List<SelectListItem>();

        foreach (var dev in developer)
        {
            items.Add(new SelectListItem {Text = dev.Article, Value = dev.Article });
        }    
        return items;
    }
}

【问题讨论】:

  • 你不能从静态方法访问实例成员!
  • 我明白了。也许还有其他方法?如果我让它不是静态的,那我怎么能称之为剃须刀页面呢?如果我创建一个类的实例,那么我将需要添加一个空的构造函数。它仍然返回 null
  • 您可以将其放入服务中,然后将其 inject 在您的页面/视图中,或者将其集成为您的自定义页面的一部分,最近我我在这里回答了一个类似的问题(关于自定义视图)stackoverflow.com/questions/66428656/…

标签: c# asp.net-core asp.net-core-mvc


【解决方案1】:
  • 删除 static 关键字,从而使该方法成为实例成员
  • ConfigureServices 中将您的课程注册为服务: services.AddScoped&lt;SelectItemHelper&gt;();

因此,您可以简单地注入您的类:在控制器或视图中(使用@inject

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2019-05-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    相关资源
    最近更新 更多