I would like to create a new IRepository implementation because I need a special handling for an entity: I would like to load it from different tables into just one model.
To do that, I created the type Nop.Core.Data.Catalog.ProductVariantRepository, which inherits from Nop.Core.Data.IRepository.
After that, I went to Nop.Web.Framework.DependencyRegistrar and added the following row
builder.RegisterType<ProductVariantRepository>().As(typeof(IRepository<>)).InstancePerHttpRequest();
just before this one:
builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerHttpRequest();
When I try to open my store, I get this error message:
The type 'Nop.Core.Data.Catalog.ProductVariantRepository' is not assignable to service 'Nop.Core.Data.IRepository`1'.
Stack Trace:
[ArgumentException: The type 'Nop.Core.Data.Catalog.ProductVariantRepository' is not assignable to service 'Nop.Core.Data.IRepository`1'.]
Autofac.Builder.RegistrationBuilder.CreateRegistration(Guid id, RegistrationData data, IInstanceActivator activator, IEnumerable`1 services, IComponentRegistration target) +652
Autofac.Builder.RegistrationBuilder.CreateRegistration(IRegistrationBuilder`3 rb) +972
Autofac.Builder.RegistrationBuilder.RegisterSingleComponent(IComponentRegistry cr, IRegistrationBuilder`3 rb) +152
Autofac.<>c__DisplayClassa`1.<RegisterType>b__9(IComponentRegistry cr) +146
Autofac.ContainerBuilder.Build(IComponentRegistry componentRegistry, Boolean excludeDefaultModules) +383
Autofac.ContainerBuilder.Update(IComponentRegistry componentRegistry) +132
Autofac.ContainerBuilder.Update(IContainer container) +181
Nop.Core.Infrastructure.DependencyManagement.ContainerManager.UpdateContainer(Action`1 action) in D:\nopcommerce\Libraries\Nop.Core\Infrastructure\DependencyManagement\ContainerManager.cs:161
Nop.Core.Infrastructure.DependencyManagement.ContainerConfigurer.Configure(IEngine engine, ContainerManager containerManager, EventBroker broker, NopConfig configuration) in D:\nopcommerce\Libraries\Nop.Core\Infrastructure\DependencyManagement\ContainerConfigurer.cs:36
Nop.Core.Infrastructure.NopEngine.InitializeContainer(ContainerConfigurer configurer, EventBroker broker, NopConfig config) in D:\nopcommerce\Libraries\Nop.Core\Infrastructure\NopEngine.cs:58
Nop.Core.Infrastructure.NopEngine..ctor(EventBroker broker, ContainerConfigurer configurer) in D:\nopcommerce\Libraries\Nop.Core\Infrastructure\NopEngine.cs:33
Nop.Core.Infrastructure.NopEngine..ctor() in D:\nopcommerce\Libraries\Nop.Core\Infrastructure\NopEngine.cs:25
Nop.Core.Infrastructure.EngineContext.CreateEngineInstance(NopConfig config) in D:\nopcommerce\Libraries\Nop.Core\Infrastructure\EngineContext.cs:55
Nop.Core.Infrastructure.EngineContext.Initialize(Boolean forceRecreate) in D:\nopcommerce\Libraries\Nop.Core\Infrastructure\EngineContext.cs:24
Nop.Web.MvcApplication.Application_Start() in D:\nopcommerce\Presentation\Nop.Web\Global.asax.cs:56
[HttpException (0x80004005): The type 'Nop.Core.Data.Catalog.ProductVariantRepository' is not assignable to service 'Nop.Core.Data.IRepository`1'.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +587
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +194
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +352
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +405
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +368
[HttpException (0x80004005): The type 'Nop.Core.Data.Catalog.ProductVariantRepository' is not assignable to service 'Nop.Core.Data.IRepository`1'.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +646
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +771
Am I doing something wrong?
How could I do that?
I need to load product variant with more infos than it is already modeled, and I separated these due to performance issues.
Thanks,
Oscar