2011-07-25 13 views
0

問題: NSBはカスタムNHB ConnectionProviderを使用しません。カスタムNHibernate ConnectionProviderを持つNServiceBus

次のセットアップとコードでNSBを設定イム(log4netのは、app.configファイルで唯一のものです):

 NServiceBus.SetLoggingLibrary.Log4Net(log4net.Config.XmlConfigurator.Configure); 

     NServiceBus.Configure.With() 
      .CustomConfigurationSource(ObjectFactory.GetInstance<IConfigurationSource>()) 
       .StructureMapBuilder() 
       .XmlSerializer() 
       .DBSubcriptionStorage(GetNHibernateConfiguration(), false) 
       .MsmqTransport() 
        .IsTransactional(false) 
        .PurgeOnStartup(false) 
        .UnicastBus() 
        .LoadMessageHandlers(First<MyEventHandler1> 
              .Then<MyEventHandler2>()) 
        .CreateBus() 
      .Start(); 

そして、これがある限り、私はDBSubscriptionストレージの代わりに、MSMQストレージを使用しないように動作。しかし、私はDBStorageが必要です。

現在約10〜15他のプロジェクトで正常に動作します私たち自身のカスタムされたConnectionProviderを、持っているが、私はNSBでそれを使用しようとすると、私は私には何の意味もdosentエラーが発生します。私がConnectionProviderを省略して標準のNHBを使用すると、正常に動作します。仕事をdoesntの

 retval.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider"); 
     retval.Add("connection.driver_class", "NHibernate.Driver.OracleDataClientDriver"); 
     retval.Add("connection.connection_string", "User Id=user;Password=pass;Pooling=False;Data Source=test"); 
     retval.Add("dialect", "NHibernate.Dialect.Oracle10gDialect"); 

コンフィグものでなければなら:

カスタムプロバイダ:標準NHBプロバイダと連携

public class MyProvider : DriverConnectionProvider 
    { 
     public override IDbConnection GetConnection() 
     { 
      var oracleRoleProvider = new OracleRoleProvider(); 
      var dbConnection = Driver.CreateConnection(); 
      return oracleRoleProvider.SetUserRoles(dbConnection);   } 
    } 

コンフィグ(これは私が欲しいものないです) :

 retval.Add("connection.provider", "MyNamespace.MyProvider, MyNamespace"); 
     retval.Add("connection.driver_class", "NHibernate.Driver.OracleDataClientDriver"); 
     retval.Add("connection.connection_string", "User Id=user;Password=pass;Pooling=False;Data Source=test"); 
     retval.Add("dialect", "NHibernate.Dialect.Oracle10gDialect"); 

例外がスローさ:

 Exception: 
     Could not instantiate connection provider: MyProvider 

     Inner: 
     Unable to cast object of type 'MyProvider' to type 'NHibernate.Connection.IConnectionProvider'. 

バージョンは、誰もがこの問題にいくつかの光を当てることができます

 NServiceBus: 2.5.0.1476 
     NHibernate: 3.1.0.4000 

を使用しましたか?

私は正弦明らかMyProviderDriverConnectionProvider :)経由IConnectionProviderを実装し、ここで私の髪を引っ張っている:S。

種類は

答えて

1

NServiceBusをマージし、NHibernateはを内在化について。つまり、継承したクラスは、NSBが参照しているクラス(DriverConnectionProvider)と同じではありません。 NSB 2.5の唯一の回避策は、依存関係をマージしないNSBのコアのみのバージョンを使用することです。私たちがNHサポートをマージなしの別のdllに移動すると、これは3.0ですべて変化します。

別のオプションは、独自のサブストレージを構築することです(読み:&ペーストをコピーし、次にNSB 1)

ホープ、このことができます!

+0

こんにちは、返信いただきありがとうございました。我々はまだ評価のために無料版を使用しているだけなので、コア版のみにアクセスすることはできません。しかし、すぐにフルバージョンにアップし、最初の1ヶ月間のリリースがないので、バージョン3.0を使用する準備が整うはずです。どうも :) –

関連する問題