【问题标题】:NService Bus throwing AnException While Using Castle WindsorNServiceBus 在使用 Castle Windsor 时抛出异常
【发布时间】:2020-05-12 04:28:05
【问题描述】:
static IHostBuilder CreateHostBuilder(string[] args)
   {
       return Host.CreateDefaultBuilder(args)
       .UseWindowsService()
       .UseNServiceBus(ctx =>
       {
           var endpointConfiguration = new EndpointConfiguration("bindingName");


           var containerSettings = endpointConfiguration.UseContainer(new WindsorServiceProviderFactory());
           containerSettings.ConfigureContainer(c => ConfigureCastleWindsor(c));

           endpointConfiguration.SendFailedMessagesTo("error");
           endpointConfiguration.AuditProcessedMessagesTo("audit");
           endpointConfiguration.EnableInstallers();

           return endpointConfiguration;
       });


   }

   private static IWindsorContainer ConfigureCastleWindsor(IWindsorContainer c)
   {
       return c.Register(Component.For<DbStore>()
                                          .DependsOn(Dependency.OnValue("Connection", ConfigurationManager.ConnectionStrings["name"].ConnectionString))
                                          .LifeStyle.PerThread,
                        Component.For<IManageUnitsOfWork>().ImplementedBy<LinqUnitOfWork>().LifestyleTransient(),
                        Component.For<IMapper>().UsingFactoryMethod(x => new Mapper(ContractAutoMapper.Start())).LifestyleSingleton());
   }

我正在引用 Nservice Bus 文档链接 (https://docs.particular.net/nservicebus/dependency-injection/castlewindsor) 以在 Nservice Bus 7.2.3 + NServiceBus.Extensions.Hosting 中将第三方城堡 Windsor 实现为 DI。

包裹信息:

  1. 主机窗口服务包 - NServiceBus.Extensions.Hosting.1.0.1
  2. NServiceBus.Extensions.DependencyInjection (1.0.1)
  3. Castle.Core (4.2.0)
  4. 温莎城堡 (4.1.1)
  5. Castle.Windsor.MsDependencyInjection (3.0.0)
  6. NServiceBus.CastleWindsor (7.0.0)

注意:第三方温莎城堡采用内部管理模式

错误信息:已使用“EndpointConfiguration.UseContainer”配置了内部管理的容器。不能同时使用内部管理的容器和外部管理的容器。

堆栈跟踪: NServiceBus.ContainerComponent.InitializeWithExternallyManagedContainer(IConfigureComponents configureComponents) at NServiceBus.EndpointCreator.CreateWithExternallyManagedContainer(EndpointConfiguration endpointConfiguration, IConfigureComponents configureComponents) at NServiceBus.HostBuilderExtensions.<>c__DisplayClass0_0.<UseNServiceBus>b__0(HostBuilderContext ctx, IServiceCollection serviceCollection) at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider() at Microsoft.Extensions.Hosting.HostBuilder.Build() at Report.Program.Main(String[] args)

我没有使用任何外部管理器模式,但仍然运行时出现此错误,请您告诉我们如何使用第三方 Castle Windsor 作为 DI

【问题讨论】:

    标签: windows-services hosting nservicebus


    【解决方案1】:

    错误消息说明了问题所在。当使用使用NServiceBus.Extensions.Hosting 包的自定义容器时,您需要在UseNServiceBus 扩展方法之前和之外执行此操作。这是一个有效的 sn-p:

    static IHostBuilder CreateHost()
    {
        return Host.CreateDefaultBuilder()
            .UseServiceProviderFactory(context => new WindsorServiceProviderFactory())
            .ConfigureContainer<WindsorContainer>((ctx, container) =>
            {
                container.Register(Component.For<MyService>());  // <- Windsor registrations can go here.
            })
            .UseNServiceBus(nsb =>
            {
                //Don't apply the custom container here.
                var endpointConfiguration = new EndpointConfiguration("Samples.Castle");
                endpointConfiguration.UseTransport<LearningTransport>();
    
                return endpointConfiguration;
            });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多