InvalidOperationException: 尚未注册类型"Piranha.AspNetCore.Services.IApplicationService"的服务



我正在尝试使用https://piranhacms.org/模板,但当我运行管理器(ADMIN(页面时,我没有使用SQL Lite,而是将我的项目切换到了SQL Server,我没有问题。我甚至可以使用管理员将数据添加到我的数据库中。只有当我只是一个试图访问该网站的普通用户时,才会出现错误。如果有人知道为什么会发生这种事,或者知道我可以把什么作为问题来看待,我会非常高兴。

我用这些指令建立了数据库https://piranhacms.org/docs/master/basics/database-setup

我的启动文件设置我的服务器

options.UseEF<SQLServerDb>(db =>
db.UseSqlServer(_config.GetConnectionString("piranha")));
options.UseIdentityWithSeed<IdentitySQLServerDb>(db =>
db.UseSqlServer(_config.GetConnectionString("piranha")))

加载的用户页面显示此错误。

An unhandled exception occurred while processing the request.
InvalidOperationException: No service for type 'Piranha.AspNetCore.Services.IApplicationService' has been registered.
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
Stack Query Cookies Headers Routing
InvalidOperationException: No service for type 'Piranha.AspNetCore.Services.IApplicationService' has been registered.
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
Microsoft.AspNetCore.Mvc.Razor.RazorPagePropertyActivator+<>c__DisplayClass8_0.<CreateActivateInfo>b__1(ViewContext context)
Microsoft.Extensions.Internal.PropertyActivator<TContext>.Activate(object instance, TContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorPagePropertyActivator.Activate(object page, ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorPageActivator.Activate(IRazorPage page, ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageCoreAsync(IRazorPage page, ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderViewStartsAsync(ViewContext context)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderPageAsync(IRazorPage page, ViewContext context, bool invokeViewStarts)
Microsoft.AspNetCore.Mvc.Razor.RazorView.RenderAsync(ViewContext context)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ViewContext viewContext, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewExecutor.ExecuteAsync(ActionContext actionContext, IView view, ViewDataDictionary viewData, ITempDataDictionary tempData, string contentType, Nullable<int> statusCode)
Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor.ExecuteAsync(ActionContext context, ViewResult result)
Microsoft.AspNetCore.Mvc.ViewResult.ExecuteResultAsync(ActionContext context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|30_0<TFilter, TFilterAsync>(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext<TFilter, TFilterAsync>(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

services.AddScoped<IApplicationService, ApplicationService>();添加到启动.cs 中的ConfigurSeries

An unhandled exception occurred while processing the request.
InvalidOperationException: No service for type 'Piranha.AspNetCore.Services.IApplicationService' has been registered.
Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
Stack Query Cookies Headers Routing
InvalidOperationException: No service for type 'Piranha.AspNetCore.Services.IApplicationService' has been registered.

您的程序搜索IApplicationService。这意味着,如果你想在程序中使用抽象,你必须解析这个抽象对象。

有很多方法可以解决这个问题。你可以创建一个IApplicationService的对象,如下所示。或者你可以使用中间件来解决它

对于ASP.NET Core Dotnet版本6:

builder.Services.AddScoped<IApplicationService, ApplicationService>();

对于其他版本,您可以接受@martijn-takken的回答。

如果您想了解此外观的更多详细信息,请点击此处:https://docs.abp.io/en/abp/4.4/Application-Services

.NET Core支持依赖注入设计模式。这种技术有助于实现类及其相对依赖关系之间的控制反转。

因此,您需要使用具体类型ApplicationService注册IApplicationService服务。AddScoped方法将使用作用域生存期(即单个请求的生存期(注册服务

builder.Services.AddScoped<IApplicationService, ApplicationService>();

相关内容