Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#在我的课堂上使用ApplicationDbContext';视图中重用的静态方法_C#_Asp.net Mvc_Asp.net Core_Dependency Injection - Fatal编程技术网

c#在我的课堂上使用ApplicationDbContext';视图中重用的静态方法

c#在我的课堂上使用ApplicationDbContext';视图中重用的静态方法,c#,asp.net-mvc,asp.net-core,dependency-injection,C#,Asp.net Mvc,Asp.net Core,Dependency Injection,我正在潜入ASP.NETMVCCore2.0,在DbContext方面遇到了一些问题,很多人似乎都遇到了,因为MS的文档正如我所想的那样令人沮丧 我有一个运行中的MVC应用程序,它带有一个DeviceController,可以在Index.cshtml视图中提供一个ViewModel。迭代模型数据可以很好地工作,并生成一个列表 现在有一些列包含不同的制造商ID 为了获得Manufacturer对象,我的计划是创建一个带有静态方法GetManufacturer(intid)的Helper类,该方法

我正在潜入ASP.NETMVCCore2.0,在DbContext方面遇到了一些问题,很多人似乎都遇到了,因为MS的文档正如我所想的那样令人沮丧

我有一个运行中的MVC应用程序,它带有一个DeviceController,可以在Index.cshtml视图中提供一个ViewModel。迭代模型数据可以很好地工作,并生成一个列表

现在有一些列包含不同的制造商ID

为了获得Manufacturer对象,我的计划是创建一个带有静态方法GetManufacturer(intid)的Helper类,该方法返回一个类型为Manufacturer的对象

这里有一个问题:如何与DbContext取得联系?因为我使用的是identity方法,所以我需要ApplicationDbContext的一个实例

我在MSDN帖子上或在这里尝试了很多,但没有一个技巧能帮助我解决问题

听着,这就是我到目前为止所做的: 助手类

public class Helper
{
    ApplicationDbContext _context;

    public Helper(ApplicationDbContext context)
    {
        _context = context;
    }

    public Manufacturer GetManufacturer(int id)
    {
        var manufacturer = _context.Manufacturers.Where(m => m.Id == id).SingleOrDefault();
        return manufacturer;
    }
}
现在,我想在我看来利用这个方法。我把它缩短了一点:

@{
ViewData["Title"] = "Devices Overview";
Layout = "~/Views/Shared/_Layout.cshtml";

var helper = new Helper();

<span>The Manufacturers Name is: 
@helper.GetManufacturer(1).ManufacturerName</span>}
@{
ViewData[“Title”]=“设备概述”;
Layout=“~/Views/Shared/_Layout.cshtml”;
var helper=newhelper();
制造商名称为:
@helper.GetManufacturer(1.ManufacturerName}
助手实例现在正在等待类型为ApplicationDbContext的参数,这不是我的意图

我知道在最近的几篇文章中,我读到了依赖注入,我认为这是我的问题,ApplicationDbContext没有注入到我的类中。但如何做到这一点呢

这将是非常有帮助的,如果你能帮我摆脱这一点,或者我对一个不同的解决方案开放

提前感谢,,
monsee

我认为您试图应用一个违反MVC原则的概念,以及它背后的整个理念。在MVC中,数据访问通过控制器进行。另外,您可以看到,拥有一个名为
Helper
的类并没有任何帮助,请将其删除。您可能试图建立的模式类似于称为“存储库”模式的模式

为您的视图设置一个视图模型,将制造商数据放置在视图模型中,并在视图中仅显示视图模型中的内容。不要试图从视图中的某个位置收集数据,否则会导致混乱

如果应用基本规则,MVC将最有效。我认为你应该跟着学习


如果您对优化数据访问感兴趣,关于“使用依赖项注入在ASP.NET Core中编写干净的代码”是非常正确的,但只有在您对整个体系结构有了更深入的了解之后才能这样做。

您可以向视图发送一个视图模型,其中包含所需的数据(ManufacturerName)。或者在您的视图中调用
var helper=ServiceLocator.GetService()
,前提是在DI容器中注册了您的helper和ApplicationDbContext。使用在视图中调用并访问db的helper类是可以做到的,而且肯定有它的位置,但在这里的示例中是非常不合适的。在控制器中构建视图模型,这是视图模型的全部目的。大家早上好,我希望我的方法不会有效。由于我的学习进度和我打算以正确的方式完成这项工作,我将回顾我的代码并扩展我的视图模型。我同意这是最好的方式,无论是MVC还是非MVC,但没有自己的创作。非常感谢您的详细回复和帮助。