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.
精彩评论