Как добавить функцию, доступную для всех страниц Razor?

Используя Razor Pages ASP.Net Core, у меня есть несколько функций, которые я хотел бы использовать на каждой странице. Я предполагаю, что раньше это делалось с помощью App_Code, но, похоже, это больше не работает в Core. Как я могу сделать это на страницах Asp.Net Core Razor Pages?


person David Small    schedule 10.02.2020    source источник
comment
подойдет ли вам Service Injection? docs. microsoft.com/en-us/aspnet/core/mvc/views/   -  person Pavel Shastov    schedule 11.02.2020


Ответы (1)


Вариант 1 - DI

1 - Создайте класс обслуживания с соответствующей функциональностью

public class FullNameService
{
    public string GetFullName(string first, string last)
    {
        return $"{first} {last}";
    }
}

2- Зарегистрируйте сервис в автозагрузке

services.AddTransient<FullNameService>();

3- Введите его на страницу бритвы

public class IndexModel : PageModel
{
    private readonly FullNameService _service;

    public IndexModel(FullNameService service)
    {
        _service = service;
    }

    public string OnGet(string name, string lastName)
    {
        return _service.GetFullName(name, lastName);
    }
}

Вариант 2 - Базовая модель

1- Создайте модель базовой страницы с помощью функции

public class BasePageModel : PageModel
{
    public string GetFullName(string first, string lastName)
    {
        return $"{first} {lastName}";
    }
}

2- Получение других страниц из базовой модели

public class IndexModel : BasePageModel
{
    public string OnGet(string first, string lastName)
    {
        return GetFullName(first, lastName);
    }
}

Вариант 3 - Статический класс

1- Используйте статическую функцию, к которой можно получить доступ со всех страниц

public static class FullNameBuilder
{
    public static string GetFullName(string first, string lastName)
    {
        return $"{first} {lastName}";
    }
}

2- Вызов статической функции со страницы бритвы

public class IndexModel : PageModel
{
    public string OnGet(string first, string lastName)
    {
        return FullNameBuilder.GetFullName(first, lastName);
    }
}

Вариант 4 - Методы расширения

1- Создайте метод расширения для определенного типа объектов (например, строки)

public static class FullNameExtensions
{
    public static string GetFullName(this string first, string lastName)
    {
        return $"{first} {lastName}";
    }
}

2- Вызов расширения со страницы бритвы

public class IndexModel : PageModel
{
    public string OnGet(string first, string lastName)
    {
        return first.GetFullName(lastName);
    }
}
person LazZiya    schedule 11.02.2020