2011-07-25 41 views
0

問題: NSB不會使用我們的自定義NHB連接提供程序。帶自定義NHibernate連接提供程序的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(); 

而且只要我不使用的,而不是MSMQ存儲DBSubscription存儲這個工程。但我需要DBStorage。

目前,我們有我們自己的自定義的ConnectionProvider,這在約10-15等項目工作正常,但是當我嘗試使用NSB使用它,我得到它dosent任何意義,我的錯誤。如果我省略ConnectionProvider並使用標準NHB,那麼它工作得很好。

自定義提供:

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

配置與標準NHB提供商合作(但這不是我想要的):

 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"); 

配置是不工作的,但應:

 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 

任何人都可以擺脫對這個問題的一些輕?

我在這裏拉出我的頭髮正弦明顯MYPROVIDER工具IConnectionProvider通過DriverConnectionProvider :):S。

親切的問候

回答

1

NServiceBus融合和內化的NHibernate。這意味着您繼承的類與NSB所引用的類不相同(DriverConnectionProvider)。 NSB 2.5中唯一的解決方法是使用不合並任何依賴項的NSB核心版本。當我們將NH支持移動到單獨的dll而沒有合併時,這一切都將在3.0中改變。

另一種辦法是建立自己的子存儲區(讀:複製粘貼&然後NSB之一)

希望這有助於!

+0

您好,感謝您的答覆和對不起我的反應遲緩。我們仍然只使用免費版進行評估,因此我們無法訪問僅核心版本。但是,由於我們很快就會發布完整版本,並且由於我們不會在第一個月左右發佈,我們應該準備使用3.0版本。謝謝 :) –

相關問題