Общие данные и общие методы в .NET Core Razor - PullRequest
0 голосов
/ 27 апреля 2018

Я новичок в C # и .NET и собираюсь создать небольшой проект CRUD на основе страниц .NET Core 2.1, EF 2.1 и Razor.

У меня есть очень простой вопрос:

Мне нужны некоторые базовые методы и некоторые базовые данные во многих моих контроллерах 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 голосов
/ 27 апреля 2018

Вы можете использовать синглтоны для этого. Вот простая реализация, основанная на вашем примере:

Сначала создайте класс для хранения значений. Ваш класс может иметь любое определение, которое вы считаете подходящим для ваших ценностей. Я использую эту структуру, чтобы оставаться ближе к вашему коду:

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;
}
...