我是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."}
};
中央方法的一个示例是接收数据库错误异常对象的代码,并从中创建错误文本消息列表,随时可以在任何视图中显示。
答案 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;
}