ASP.NET Core MVC поддерживает внедрение зависимостей в представления. За внедрение зависимостей в представление отвечает директива @inject.
Допустим, у нас в проекте в файле Program.cs внедряется сервис ITimeService:
var builder = WebApplication.CreateBuilder(args); // добавляем поддержку контроллеров с представлениями builder.Services.AddControllersWithViews(); // внедряем сервис ITimeService builder.Services.AddTransient<ITimeService, SimpleTimeService>(); var app = builder.Build(); // устанавливаем сопоставление маршрутов с контроллерами app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); public interface ITimeService { string Time { get; } } public class SimpleTimeService : ITimeService { public string Time => DateTime.Now.ToShortTimeString(); }
Интерфейс ITimeService определяет свойство Time. В реализации этого интерфейса - классе SimpleTimeService данное свойство возвращает строку с текущим временем. И затем класс SimpleTimeService применяется в качестве реализации для сервиса ITimeService.
И далее мы можем использовать зависимости в представлении. Например, изменим какое-нибудь представление:
@inject ITimeService timeService <h2>Current Time: @timeService.Time</h2>
Директива @inject принимает два параметра: первый параметр представляет тип сервиса (в данном случае ITimeService), а второй - название переменной этого типа (в данном случае
timeService
). И после этого мы можем использовать переменную: