#c# #nuget-package #.net-5
#c# #nuget-пакет #.net-5
Вопрос:
У меня проблема, когда следующий код выполняет службы строк.AddControllers().AddNewtonsoftJson() Выдает это исключение, если строка удалена, служба выполняется нормально, она появляется.
Некоторые службы не могут быть созданы (ошибка при проверке дескриптора службы ‘ServiceType: Microsoft.AspNetCore.Mvc.Infrastructure.Время жизни IActionInvokerFactory: Одноэлементный тип реализации: Microsoft.AspNetCore.Mvc.Infrastructure.ActionInvokerFactory’: нет конструктора для типа ‘Microsoft.AspNetCore.Mvc.Infrastructure.Экземпляр ControllerActionInvokerProvider’ может быть создан с использованием сервисов из контейнера служб и значений по умолчанию.) (Ошибка при проверке дескриптора службы ‘ServiceType: Microsoft.AspNetCore.Mvc.Abstractions.Время жизни IActionInvokerProvider: переходный тип реализации: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvokerProvider’: нет конструктора для типа ‘Microsoft.AspNetCore.Mvc.Infrastructure.Экземпляр ControllerActionInvokerProvider’ может быть создан с использованием сервисов из контейнера служб и значений по умолчанию.) (Ошибка при проверке дескриптора службы ‘ServiceType: Microsoft.AspNetCore.Mvc.Infrastructure.IActionResultExecutor`1 [Microsoft.AspNetCore.Mvc.VirtualFileResult] Время жизни: Одноэлементный тип реализации: Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor’: Не удалось разрешить службу для типа ‘Microsoft.AspNetCore.Hosting.IWebHostEnvironment ‘ при попытке активировать ‘Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor’.) (Ошибка при проверке дескриптора службы ‘ServiceType: Microsoft.AspNetCore.Mvc.Routing.Время жизни обработчика MvcRouteHandler: Одноэлементный тип реализации: Microsoft.AspNetCore.Mvc.Routing.MvcRouteHandler’: нет конструктора для типа ‘Microsoft.AspNetCore.Mvc.Infrastructure.Экземпляр ControllerActionInvokerProvider’ может быть создан с использованием сервисов из контейнера служб и значений по умолчанию.) (Ошибка при проверке дескриптора службы ‘ServiceType: Microsoft.AspNetCore.Mvc.Routing.Время жизни обработчика MvcAttributeRouteHandler: переходный тип реализации: Microsoft.AspNetCore.Mvc.Routing.MvcAttributeRouteHandler’: нет конструктора для типа ‘Microsoft.AspNetCore.Mvc.Infrastructure.Экземпляр ControllerActionInvokerProvider’ может быть создан с использованием сервисов из контейнера служб и значений по умолчанию.)
Я работаю под .Net5 и имею последнюю версию Microsoft.Установлен пакет AspNetCore.Mvc.NewtonsoftJson. Любые идеи о том, почему services.AddControllers().AddNewtonsoftJson() выдает эту ошибку?
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices((hostContext, services) =>
{
services.AddControllers().AddNewtonsoftJson();
services.AddHostedService<Service>();
}).UseSerilog();
}
Установленные пакеты:
Microsoft.AspNetCore.Mvc.NewtonsoftJson
Microsoft.Extensions.ApiDescription.Client
Microsoft.Extensions.Hosting
Microsoft.Extensions.Hosting.WindowsServices
NSwag.ApiDescription.Client
Serilog.AspNetCore
Serilog.Sinks.RollingFile
System.ServiceModel.Http
System.ServiceModel.Primitives
Комментарии:
1. что произойдет, если вы просто вызовете
services.AddControllers();
само по себе?2.
ActionInvokerFactory
был зарегистрирован как сервис, но не является одной из его зависимостей? ( github.com/dotnet/aspnetcore/blob/main/src/Mvc/Mvc.Core/src /… ) МожетIActionInvokerProvider
быть, служб нет? Это исключение AggregateException, есть ли какие-либо другие связанные ошибки?3. Спасибо, ребята, я опубликовал все исключение выше. Если я удаляю строку, служба запускается. Возможно, это не нужно. Если я запускаю службы. AddControllers(); Я все еще получаю ошибку исключения. Я новичок в мире .Net Core и нуждаюсь в поддержке Json в своем сервисе, поэтому я надеюсь разобраться. Спасибо за вашу помощь.
4. Если я его не использую, у меня все еще есть доступ к использованию функций пакета Json, таких как Newtonsoft.Json. JsonConvert . ДесериализаЦиянонимыЙтип()? Я предполагаю, что именно делает использование сервисов. AddControllers().AddNewtonsoftJson() предоставляет именно. В рамках WCF я бы просто добавил Newtonsoft. Пакет Json и будет выполнен, но в ядре это не так просто, я думаю.
Ответ №1:
Эта проблема не имеет ничего общего с расширением Newtonsoft.
Вам необходимо импортировать ASP.NET Базовая платформа для использования контроллеров:
Microsoft.AspNetCore.Hosting;
Microsoft.Extensions.Hosting;
Затем используйте этот метод расширения:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// ...
});
Вам не хватает ASP.NET Время выполнения ядра, поэтому он понятия не имеет, как обращаться с контроллерами.
Что я бы настоятельно рекомендовал вам сделать (если вам нужны контроллеры), так это начать все сначала. При выборе типа проекта выберите «ASP.NET Основной веб-сайт», затем выберите «Веб-API» в качестве типа веб-сайта.
Это даст вам все необходимое для запуска контроллеров.
Комментарии:
1. Спасибо, Энди, это имеет смысл. Я разрабатываю простую клиентскую службу SOAP, а не веб-API с использованием .Net Core. Служба предназначена для взаимодействия с SOAP-клиентом для обмена сообщениями в фоновой задаче. Мне нужна поддержка Json для создания пакетов Rest и сериализации. В прошлом с WCF .Net Framework я просто использовал Newtonsoft. Json pkg и это сработало хорошо, но я думаю, что в ядре я не могу использовать этот pkg, не так ли? Если это все еще работает в ядре, я мог бы просто избавиться от использования Microsoft. Пакет AspNetCore.Mvc.NewtonsoftJson и вообще не использует контроллеры. Что вы думаете?
2. @Wildview — если вы используете SOAP, тогда вы должны использовать WCF. Существуют пакеты, которые работают с WCF для .NETCore. Контроллеры предназначены строго для конечных точек RESTful, а не для обмена сообщениями SOAP. Вы можете получить более подробную информацию о том, как использовать WCF в .NET Core здесь: docs.microsoft.com/en-us/dotnet/core/additional-tools /…
3. @Wildview — это также может быть вам интересно: devblogs.microsoft.com/dotnet /…