コード例 #1
0
 public async Task InvokeAsync(HttpContext context, TimeService timeService)
 {
     if (context.Request.Path.Value.ToLower() == "/time2")
     {
         context.Response.ContentType = "text/html; charset=utf-8";
         await context.Response.WriteAsync($"Текущее время: {timeService?.Time}");
     }
     else
     {
         await _next.Invoke(context);
     }
 }
コード例 #2
0
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, TimeService timeService)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMiddleware <TimerMiddleware>();

            app.UseMiddleware <TimerMiddleware2>();
            //проблему можно исправить, передавая аргумент не в конструктор а в метод
            //InvokeAsync (см. класс TimerMiddleware2)

            //либо передавая контекст


            //сервис мы можем передать как аргумент метода Configure
            //а также следующим образом:
            var aServise = app.ApplicationServices.GetService <TimeService>();


            app.Run(async(context) =>
            {
                //еще два варианта получения сервиса
                //var aService = context.RequestServices.GetService<TimeService>();
                ////возвращает null, если для данного сервиса не установлена зависимость

                //var aService = context.RequestServices.GetRequiredService<TimeService>();
                ////генерирует исключение, если для данного сервиса не установлена зависимость

                //в коде ниже мы работаем с сервисом напрямую
                //в данном случае, время также не обновляется
                context.Response.ContentType = "text/html; charset=utf-8";
                await context.Response.WriteAsync($"Текущее время: {timeService?.Time}");
            });
        }
コード例 #3
0
 public TimerMiddleware(RequestDelegate next, TimeService timeService)
 {
     _next        = next;
     _timeService = timeService;
 }