Представления в ASP.NET Core MVC. Внедрение зависимостей в представления

Несмотря на то, что данные, отображаемые представлениями, должна передаваться от контроллера, всё же ASP.NET Core MVC позволяет внедрять зависимости и в представления. Внедрение зависимостей в представления можно допускать, например, когда информация из сервиса используется непосредственно для отображения данных в представлении.

Директива Razor @inject

Для внедрения зависимости в представление ASP.NET Core MVC используется директива Razor @inject. Допустим, нам необходимо, чтобы на главной странице нашего приложения выводилось текущее время. Напишем следующий сервис:

namespace AspViews
{
    public interface ITimeService
    {
        public string GetTime();
    }
    public class TimeService: ITimeService
    {
        public string GetTime()
        {
            return DateTime.Now.ToLongTimeString(); 
        }
    }
}

Зарегистрируем сервис в контейнере зависимостей:

   public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            // Add services to the container.
            builder.Services.AddControllersWithViews();

            builder.Services.AddTransient<ITimeService, TimeService>();
....

Теперь внедрим этот сервис в представление View/Home/Index.cshtml следующим образом:

@inject ITimeService timer

@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <p>@timer.GetTime()<p/>
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

здесь мы использовали директиву @inject для внедрения зависимости:

@inject ITimeService timer

и вызвали метод GetTime() сервиса на странице:

<p>@timer.GetTime()<p/>

Результат:

Итого

Для внедрения зависимостей в представление используется директива Razor @inject. При внедрении зависимостей в представление стоит придерживаться разделения обязанностей — большинство данных в представление должно передаваться из контроллеров и внедрение зависимостей в представление стоит использовать в исключительных случаях.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии