在NopCommerce开发过程中出现插件问题

时间:2019-01-26 07:30:42

标签: c# .net-core nopcommerce

我将在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

2 个答案:

答案 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;
}