我将在NopCommerce 4.0上进行一些开发。
我已将NopCommerce 4.0源代码导入VS2019。当我尝试运行我的项目时,所有插件都会在Resolve
方法NopEngine.cs
内生成类似这样的异常:
public object Resolve(Type type)
{
return GetServiceProvider().GetRequiredService(type);
}
例如例外之一是:
“ Nop.Plugin.Payments.CheckMoneyOrder.CheckMoneyOrderPaymentProcessor” 尚未注册。为避免此异常,请注册一个 提供服务的组件,使用检查服务注册 IsRegistered(),或使用ResolveOptional()方法来解析 可选的依赖项。
这是完整的异常详细信息:
Autofac.Core.Registration.ComponentNotRegisteredException
HResult = 0x80131500消息=请求的服务 'Nop.Plugin.Payments.CheckMoneyOrder.CheckMoneyOrderPaymentProcessor' 尚未注册。为避免此异常,请注册一个 提供服务的组件,使用检查服务注册 IsRegistered(),或使用ResolveOptional()方法来解析 可选的依赖项。来源= Autofac StackTrace:位于 Autofac.ResolutionExtensions.ResolveService(IComponentContext上下文, 服务服务,IEnumerable`1参数)位于 Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type 在Nop.Core.Infrastructure.NopEngine.Resolve(Type 输入 V:\ nopCommerce_4.00_Source \ Libraries \ Nop.Core \ Infrastructure \ NopEngine.cs:line 254
答案 0 :(得分:1)
nop v4.0似乎有问题,因为它正在将卸载的插件加载到内存中,并已在v4.10中解决。您可以升级到更新的版本,也可以检查以下修补程序,如果可以的话!
更改
public object Resolve(Type type)
{
return GetServiceProvider().GetRequiredService(type);
}
收件人
public object Resolve(Type type)
{
if (type.IsSubclassOf(typeof(BasePlugin))) {
return null;
}
return GetServiceProvider().GetRequiredService(type);
}
答案 1 :(得分:0)
当我忘记在其界面上注册服务时遇到此错误
例如:
public class DependencyRegistrar : IDependencyRegistrar
{
/// <summary>
/// Register services and interfaces
/// </summary>
/// <param name="builder">Container builder</param>
/// <param name="typeFinder">Type finder</param>
/// <param name="config">Config</param>
public virtual void Register(ContainerBuilder builder, ITypeFinder typeFinder, NopConfig config)
{
//register service manager
builder.RegisterType<SearchFilterService>().As<ISearchFilterService>().InstancePerLifetimeScope();
builder.RegisterType<ElasticSearchService>().As<IElasticSearchService>().InstancePerLifetimeScope();
}
/// <summary>
/// Gets order of this dependency registrar implementation
/// </summary>
public int Order => 1;
}