Исключение AutoFac после обновления NServiceBus

Я только что обновил NServiceBus с 4.6 до 5.0.

Я сделал шаги, предложенные в документе «от 4 до 5», и могу скомпилировать. Теперь я получаю следующую ошибку:

Ни один из конструкторов, найденных с помощью «Autofac.Core.Activators.Reflection.DefaultConstructorFinder» для типа «Nop.Web.Controllers.ShoppingCartController», не может быть вызван с доступными службами и параметрами: не удается разрешить параметр «шина NServiceBus.IBus» конструктора « Void .ctor(NServiceBus.IBus, ...

Что нужно сделать?

(Обновление: моя конфигурация)

public static class ServiceBus
    {
        public static void Init(ILifetimeScope scope)
        {

            var configuration = new BusConfiguration();
            configuration.EndpointName(ConfigurationManager.AppSettings["ServiceBusEndpointName"]);
            configuration.UseTransport<MsmqTransport>();
            configuration.UseSerialization<JsonSerializer>();
            configuration.UsePersistence<RavenDBPersistence>();
            configuration.DisableFeature<Sagas>();
            configuration.Transactions().Enable();
            configuration.AssembliesToScan(AllAssemblies
                .Matching("Nop.Services.dll")
                .And("TengoMessages.dll")
                .And("Partner.Pricing.Messages.dll")
                .And("Partner.Pricing.Infrastructure.dll"));
            configuration.UseContainer<AutofacBuilder>();
            configuration.PurgeOnStartup(false);

            var bus  = Bus.Create(configuration);
            bus.Start();


            var newBuilder = new ContainerBuilder();
            newBuilder.RegisterInstance(bus);
            newBuilder.Update(Singleton<IContainer>.Instance);        
        }

person Ole Albers    schedule 20.01.2015    source источник
comment
Не уверен, как это могло работать до пожара. В NSB 4 при использовании собственного контейнера вы должны передать его в качестве параметра в конфигуратор. Мне очень любопытно, что вы думаете здесь, если вы не знаете NServiceBus о своем контейнере, как это может разрешить ваши зависимости?   -  person Alexey Zimarev    schedule 02.02.2015
comment
После нескольких недель исправления ошибок мы решили откатить наш проект и остаться с версией 4.6.   -  person Ole Albers    schedule 02.02.2015
comment
Проблема очень легко исправить. В документации точно сказано, что вам нужно сделать docs.particular.net/nservicebus/containers.   -  person Alexey Zimarev    schedule 02.02.2015
comment
@OleAlbers такая же ситуация! Фактическая ошибка: DeclaringMethod = error CS0433: Тип «Сервис» существует как в «Autofac, версия = 3.5.0.0, культура = нейтральная, PublicKeyToken = 17863af14b0044da», так и в «NServiceBus.Core, версия = 4.5.0.0, культура =». нейтральный, PublicKeyToken=9fc386479f8a226c' теперь интересно, как это исправить...   -  person evictednoise    schedule 16.09.2016


Ответы (1)


Я не использую AutoFac, поэтому я не знаком с концепцией ContainerBuilder, но, похоже, вы хотите использовать существующий контейнер с NServiceBus?

Сначала создайте экземпляр своего контейнера, а затем измените код конфигурации, чтобы использовать:

configuration.UseContainer<AutofacBuilder>(customizations =>
 customizations.ExistingContainer(container));

Похоже, что предпоследняя строка кода регистрирует шину — в этом нет необходимости, поскольку приведенный выше код обеспечит правильную регистрацию всех классов, связанных с NSB.

person Phil Sandler    schedule 20.01.2015