2011-07-20 10 views
0

にバスを登録する必要があります。他の場所で、私はウィンザーインストーラすなわちを使用していたコードでNServicebus CastleWindsorBuilderは、私は次のコードを持っているコンテナ

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 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()); 
    } 
} 

問題がある - バスISNコンテナに登録されていませんか?バスが登録されるように、どうすれば入手できますか?

** * ****更新** * ** * * *

これは動作しません!私はsubscriber2などがすでにそのコンテナとしてウィンザーを使用するように設定されているパブ/サブサンプルをチェックしました

_container = new WindsorContainer(); 

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

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

CastleWindsorBuilderのコードを見ると、バスがコンテナに登録されていないようです。だから私はこれを行う方法がわからない。私はそれがシンプルだと賭ける。 – iwayneo

答えて

0

は、コンストラクタはのIBusプロパティを注射し追加し、(バージョン2.5に)すべてが期待どおりに動作します。

_containerを渡さずに、NServiceBusで設定することを検討してください。

+0

こんにちはUdi、応答のおかげで、私は私が与えた例として正確に私の質問を更新しました - これは私の実際のコードです。 – iwayneo

+0

.UnicastBus()を呼び出す必要があります。CreateBus();すべてをセットアップする –

関連する問題