开发者

should the NServicebus CastleWindsorBuilder register the bus into the container

I have the following code:

public class MessageEndpoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    private IWindsorContainer _container;

    public void Init()
    {
        _container = new WindsorContainer();

        var bus = (IBus)Configure.With()
          .CastleWindsorBuilder(_container)
          .MsmqTransport()
          .PurgeOnStartup(true);

        _container.Register(Component.For<IWindsorContainer>().Instance(_container));
        _container.Install(FromAssembly.This());

    }
}

elsewhere in the code i am using windsor instal开发者_运维知识库lers i.e.:

 public class StorageConfiginstaller : IWindsorInstaller
{
    /// <summary>
    /// Performs the installation in the <see cref="T:Castle.Windsor.IWindsorContainer"/>.
    /// </summary>
    /// <param name="container">The container.</param><param name="store">The configuration store.</param>
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Component.For<IStoreEvents>().Instance(BuildEventStore(container.Kernel)).LifeStyle.Singleton);
        container.Register(Component.For<IDetectConflicts>().ImplementedBy<ConflictDetector>());
        container.Register(Component.For<IRepository>().ImplementedBy<EventStoreRepository>());
        container.Register(Component.For<IConstructAggregates>().ImplementedBy<AggregateFactory>());
        container.Register(Component.For<IBus>().ImplementedBy<UnicastBus>());
    }

    private static IStoreEvents BuildEventStore(IKernel container)
    {
        return Wireup.Init()
            .UsingRavenPersistence("EventStore", new DocumentObjectSerializer())
            .UsingAsynchronousDispatcher()
            .PublishTo(new DelegateMessagePublisher(c => DispatchCommit(container, c)))
            .Build();
    }

    private static void DispatchCommit(IKernel container, Commit commit)
    {
        var publisher = container.Resolve<IBus>();
        publisher.Publish(commit.Events.Select(e => (IMessage)e.Body).ToArray());
    }
}

problem is - the bus isn't registered in the container? How do i get it so the bus is registered?

*******update********

this doesn't work?!

 _container = new WindsorContainer();

      var c =  Configure.With()
          .CastleWindsorBuilder(_container)
          .MsmqTransport()
          .PurgeOnStartup(true);

        var bus = _container.Resolve<IBus>();


I've checked with the Pub/Sub sample where Subscriber2 is already set up to use Windsor as its container, added a constructor injected IBus property, and everything works as expected (on version 2.5).

Consider not passing in the _container and just letting NServiceBus set that up for you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜