rebus-org / Rebus

:bus: Simple and lean service bus implementation for .NET
https://mookid.dk/category/rebus
Other
2.28k stars 355 forks source link

when upgrading to latest version custom topic name convention fails #870

Closed sabbadino closed 4 years ago

sabbadino commented 4 years ago

after upgrading to Rebus" Version="6.1.0" Rebus.AzureServiceBus" Version="7.1.0 Rebus.Serilog" Version="6.0.0 Rebus.ServiceProvider" Version="5.0.2

( This is my registration code with a custom ITopicNameConvention

services.AddRebus(configure => { return configure .Transport(t => t.UseAzureServiceBus( serviceBusSettingsValues.ConnectionString , serviceQueueName)) .Logging(l => l.Serilog()).Options(o => { o.UseTopicNameFromAssemblyAndClassName(); }).Options(o => { o.SetMaxParallelism(1); o.SetNumberOfWorkers(1);}); }); ) I get this error Attempted to register primary -> Rebus.Topic.ITopicNameConvention, but a primary registration already exists: primary -> Rebus.Topic.ITopicNameConvention

This exception was originally thrown at this call stack: Rebus.Injection.Injectionist.Register(System.Func<Rebus.Injection.IResolutionContext, TService>, bool, string) in Injectionist.cs

Dmbo.V3.Infrastructure.Rebus.ShortTopicsRebusConfigurationExtensions.UseTopicNameFromAssemblyAndClassName(Rebus.Config.OptionsConfigurer) in ShortTopicsRebusConfigurationExtensions.cs Dmbo.v3.Partner.Api.Startup.ConfigureServices.AnonymousMethod__1_5(Rebus.Config.OptionsConfigurer) in Startup.cs Rebus.Config.RebusConfigurer.Options(System.Action) in RebusConfigurer.cs Dmbo.v3.Partner.Api.Startup.ConfigureServices.AnonymousMethod1(Rebus.Config.RebusConfigurer) in Startup.cs Rebus.ServiceProvider.ServiceCollectionExtensions.AddRebus.AnonymousMethod4(System.IServiceProvider) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor<TArgument, TResult>.VisitCallSite(Microsoft.Extensions.DependencyInjection.ServiceLookup.IServiceCallSite, TArgument) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(Microsoft.Extensions.DependencyInjection.ServiceLookup.ScopedCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton(Microsoft.Extensions.DependencyInjection.ServiceLookup.SingletonCallSite, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope) ... [Call Stack Truncated]

mookid8000 commented 4 years ago

Oh, this is because Rebus' Azure Service Bus transport registers a topic name convention too.

If you change your UseTopicNameFromAssemblyAndClassName extension to use Decorate instead of Register, then it can still register its convention.