.NET Core Razor中的共享数据和共享方法

时间:2018-04-27 08:16:00

标签: c# razor asp.net-core entity-framework-core

我是C#和.NET的新手,我即将创建一个基于.NET Core 2.1,EF 2.1和Razor页面的小型CRUD项目。

我有这个非常基本的问题:

我需要一些基本的方法和许多cshtml.cs控制器中的一些基本数据,我想创建一个中心位置来定义它们。这是推荐的方法吗?

我设想一个或多个具有静态属性的静态类,以便为控制器提供公共数据,并使用可供所有控制器使用的方法。但这是推荐的解决方案吗?我应该在项目的哪个文件夹中放置它们?任何命名约定也将受到赞赏。

我想要存储的中央数据的示例是数据库错误的字典,如下所示:

    Dictionary<int, string> _sqlErrorTextDict = new Dictionary<int, string>
    {
        {547,
            "This operation failed because another data entry uses this entry."},
        {2601,
            "One of the properties is marked as Unique index and there is already an entry with that value."}
    };

中央方法的一个示例是接收数据库错误异常对象的代码,并从中创建错误文本消息列表,随时可以在任何视图中显示。

1 个答案:

答案 0 :(得分:2)

你可以使用单身人士。这是一个基于您的示例的简单实现:

首先,创建一个用于存储值的类。您的课程可以包含您认为适合您的价值观的任何定义。我使用这种结构来保持最接近你的代码:

class CommonData : Dictionary<int, string>
{

}

在您的startup.cs类中,您可以使用它:

services.AddSingleton(new CommonData {
    {547,
        "This operation failed because another data entry uses this entry."},
    {2601,
        "One of the properties is marked as Unique index and there is already an entry with that value."}
});

如果您有太多数据并希望减少此文件上的代码,则可以为此创建扩展功能。

在您的控制器(和其他服务)中,您可以使用依赖注入来访问此数据:

private readonly CommonData commonData;
public HomeController(CommonData commonData)
{
    this.commonData = commonData;
}