Ни одна служба для данного типа не зарегистрированаC#

Место общения программистов C#
Ответить
Anonymous
 Ни одна служба для данного типа не зарегистрирована

Сообщение Anonymous »

Я пытаюсь реализовать промежуточное ПО ASP.NET Core, и вот весь код моего проекта:

Код: Выделить всё

public class HostMiddleware : IMiddleware
{
public int Count { get; set; }

public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
if (context.Request.Query.ContainsKey("hello"))
{
await context.Response.WriteAsync($"Hello World: {++Count}");
}
else
{
await next.Invoke(context);
}
}
}

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider provider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseMiddleware();

app.Run(async context =>
{
context.Response.StatusCode = 400;
await context.Response.WriteAsync("Bad request.");
});
}
Однако при запуске этого сервера я получаю следующую ошибку:


InvalidOperationException: служба для типа «WebApplication4.HostMiddleware» не зарегистрирована.


Изображение


Почему я получаю эту ошибку? Зачем моему промежуточному ПО нужно регистрировать какие-либо службы, если я не использую внедрение зависимостей в своем проекте?

Обновление:

По какой-то причине эта ошибка не возникает, когда я прекратите использовать IMiddleware, переименуйте InvokeAsync в Invoke и реализуйте мое промежуточное программное обеспечение следующим образом:

Код: Выделить всё

public class WmsHostMiddleware
{
private readonly RequestDelegate _next;

public int Count { get; set; }

public WmsHostMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task Invoke(HttpContext context)
{
if (context.Request.Query.ContainsKey("hello"))
{
await context.Response.WriteAsync($"Hello World: {++Count}");
}
else
{
await _next.Invoke(context);
}
}
}
Вопрос остается открытым — почему это происходит? В чем разница? Зачем мне регистрировать службы при использовании IMiddleware.

Подробнее здесь: https://stackoverflow.com/questions/483 ... registered
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»