2010-11-18 10 views
2

nserviceバスで使用されている現在のセッションファクトリをカスタムサガファインダに注入するにはどうすればよいですか?セッションファクトリを設定する

私は、次のコード

NServiceBus.Configure.With() 
       .CastleWindsorBuilder() 
       .Sagas() 
       .NHibernateSagaPersister() 
       .XmlSerializer(); 

を使用してサガを初期化していると私はsagafinder

public sagafinder:saga<...> 
{ 
private ISessionFactory sessionFactory; 

     public virtual ISessionFactory SessionFactory 
     { 
      get { return sessionFactory; } 
      set { sessionFactory = value; } 
     } 
} 

を持っていますが、このセッションファクトリが常にnullとして来ています。 私はセッションファクトリーを設定していないことを知っています。どうすれば設定できますか?

おかげで、 Ajai

+0

NHペリスタを使用しているので、Saga の実装でConfigureHowToFindSaga()メソッドをオーバーライドしている限り、これはあなたのためのSagaの検出を処理します。組み込みのメカニズムがあなたの状況をどのように満たしていないかについてコメントできますか? –

答えて

0

は、問題のコードは全くサガファインダーのようには見えません。私が見るものは、むしろサガそのものです。メッセージのいくつかのプロパティに基づいてサガを見つけようとしているだけの場合、adamの提案は正しいものです。セッションファクトリは必要なく、単にConfigureHowToFindSaga()をオーバーライドする必要があります。あなたが何か他のことをしようとしているなら、nhibernate saga persisterによって使用されているセッションファクトリがあなたのコンテナに登録されておらず、あなたのサガの依存関係を解決できるだけです。あなた自身が保存したサガを本当に照会したいと思う可能性は非常に低いです。だから、あなたが本当に理由があるならば、私はたぶん、データベースのセッションファクトリをサガ情報で登録し、nservicebusに独自のものを持たせることをお勧めします。あなたが本当にしたいと思うのは難しいです。

2

この記事の時代を控えて、私はあなたが2.6のようなNServiceBusの3つ前のバージョンを使用していると仮定します。

私はこれを調べており、NHibernateSagaPersisterに組み込まれているSaga Findersは難しい問題です。

NHibernateSagaFinderは、NServiceBus.Core.dllに焼き付けられたNHibernateのIlmergedバージョンを使用します。あなたは(デフォルトのサガファインダーからリッピング)は、次の書き込み時にそう:ここ

public class MySagaFinder : IFindSagas<MySaga> 
{ 
    public NHibernate.ISession Session {get; set;} 
    ... 
} 

ISessionはあなたがいないNServiceBusの内部NHibernateのreferrencedいるNHibernate.dllの1を参照します。私が知る限り、NServiceBus.CoreのNHibernateを "内部"として参照することはできません。これは、NServiceBusが使用するIOCコンテナがセッションを挿入しないか、設定した方法によっては間違ったものを注入することを意味します。

私はこれをしばらく見てきました。私は、NServiceBusに組み込まれた独自のカスタムSagaFinderを作成することが最良の方法だと思います。 GitHubのコードベースにあるように、これを行うのは難しいことではありません。

これはNServiceBus(> = 3)のそれ以降のバージョンで修正されるかもしれませんが、私は彼らが現在デフォルトのsaga持続性のためにRavenDBを使用しているとは思っていません。

関連する問題