Castle windsor NServicebus CastleWindsorBuilder是否应将总线注册到容器中
我有以下代码:Castle windsor NServicebus CastleWindsorBuilder是否应将总线注册到容器中,castle-windsor,ioc-container,nservicebus,esb,Castle Windsor,Ioc Container,Nservicebus,Esb,我有以下代码: public class MessageEndpoint : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization { private IWindsorContainer _container; public void Init() { _container = new WindsorContainer(); var bus = (IBus)Confi
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());
}
}
public class MessageEndpoint:IConfigureThisEndpoint,AsA_服务器,IWantCustomInitialization
{
私人IWindsorContainer(集装箱);;
公共void Init()
{
_容器=新WindsorContainer();
var bus=(IBus)Configure.With()
.CastleWindsorBuilder(_集装箱)
.MsmqTransport()
.PurgeOnStartup(正确);
_Register(Component.For().Instance(_container));
_container.Install(fromsassembly.This());
}
}
在代码的其他地方,我使用的是温莎安装程序,即:
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());
}
}
公共类StorageConfiginstaller:IWindsorInstaller
{
///
///在中执行安装。
///
///容器。配置存储。
public void安装(IWindsorContainer、IConfigurationStore)
{
container.Register(Component.For().Instance(BuildEventStore(container.Kernel)).lifety.Singleton);
container.Register(Component.For().ImplementedBy());
container.Register(Component.For().ImplementedBy());
container.Register(Component.For().ImplementedBy());
container.Register(Component.For().ImplementedBy());
}
专用静态iStoreeEvents BuildEventStore(IKernel容器)
{
返回Wireup.Init()
.UsingRavenPersistence(“EventStore”,新的DocumentObjectSerializer())
.UsingAsynchronousDispatcher()
.PublishTo(新的DelegateMessagePublisher(c=>DispatchCommit(容器,c)))
.Build();
}
私有静态void DispatchCommit(IKernel容器,Commit-Commit)
{
var publisher=container.Resolve();
publisher.Publish(commit.Events.Select(e=>(IMessage)e.Body.ToArray());
}
}
问题是-总线未在容器中注册?我怎样才能把车登记下来
*********更新*********
这不管用
_container = new WindsorContainer();
var c = Configure.With()
.CastleWindsorBuilder(_container)
.MsmqTransport()
.PurgeOnStartup(true);
var bus = _container.Resolve<IBus>();
\u container=new WindsorContainer();
var c=Configure.With()
.CastleWindsorBuilder(_集装箱)
.MsmqTransport()
.PurgeOnStartup(正确);
var bus=_container.Resolve();
我已经检查了Pub/Sub示例,其中Subscriber2已经设置为使用Windsor作为其容器,添加了构造函数注入的IBus属性,并且一切都按预期工作(在版本2.5上)
请考虑不要传入_容器,只让NServiceBus为您设置。查看CastleWindsorBuilder的代码,它似乎没有将总线注册到容器中。所以我不知道怎么做。我打赌它很简单。嗨,Udi,谢谢你的回答,我更新了我的问题,因为我给出的示例不正确-这是我的实际代码。你必须调用.UnicastBus().CreateBus();把一切都安排好。