1

我正在嘗試使用Nhibernate工具來配置Nhibernate和Castle Windsor Container。但我有使用Nhibernate工具配置Castle Windsor Container和Nhibernate

這裏是我的web.config

<castle> 
    <facilities> 
     <facility id="nhibernate" 
       type="Castle.Facilities.NHibernateIntegration.NHibernateFacility, Castle.Facilities.NHibernateIntegration"     
       isWeb="true"> 
     <factory id="nhibernate.factory"> 
      <settings> 
      <item key="connection.provider">NHibernate.Connection.DriverConnectionProvider</item> 
      <item key="connection.driver_class">NHibernate.Driver.SqlClientDriver</item> 
      <item key="connection.connection_string">Data Source=184.106.114.146\calyx;Initial Catalog=ClaimBook;User ID=system;Password=Manager1!;Persist Security Info=True;Max Pool Size=120;Connection Lifetime=120;</item> 
      <item key="dialect">NHibernate.Dialect.MsSql2000Dialect</item> 
      <item key="show_sql">true</item> 
      <item key="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</item> 
      </settings> 
      <resources>    
      <resource assembly="Astute.Framework.Data" /> 
      </resources> 
     </factory> 
     </facility> 
    </facilities> 
    </castle> 

,並在我的Global.asax我加入以下行

container.Kernel.Register(Component.For<ISessionManager>().ImplementedBy<DefaultSessionManager>().Named("nhfacility.sessionmanager")); 
      container.Kernel.Register(Component.For<ISessionFactoryResolver>().ImplementedBy<SessionFactoryResolver>().Named("nhfacility.sessionfactory.resolver")); 
      container.Kernel.Register(Component.For<ISessionStore>().ImplementedBy<WebSessionStore>().Named("nhfacility.sessionstore")); 
      container.Kernel.Register(Component.For<ITransactionManager>().ImplementedBy<DefaultTransactionManager>().Named("nhibernate.transaction.manager")); 

但我發現了以下錯誤

* ISessionFactory組件未映射爲指定的別名:nh.facility.default S大小寫跡: [FacilityException:一個ISessionFactory組件未被映射爲指定的別名:nh.facility.default] Castle.Facilities.NHibernateIntegration.Internal.SessionFactoryResolver.GetSessionFactory(String alias)+147 Castle.Facilities.NHibernateIntegration.DefaultSessionManager .CreateSession(字符串別名)65 Castle.Facilities.NHibernateIntegration.DefaultSessionManager.OpenSession(字符串別名)150 Castle.Facilities.NHibernateIntegration.DefaultSessionManager.OpenSession()37 Castle.Facilities.NHibernateIntegration.Components.Web.SessionWebModule .OnBeginRequest(Object sender,EventArgs e)+124 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+148 System.Web.HttpApplication.ExecuteS tep(IExecutionStep step,布爾型& completedSynchronously)+75 *

我不知道我在配置中缺少什麼。有什麼想法嗎?

感謝

伊姆蘭

+0

你爲什麼要手動註冊ISessionManager等?該設施負責照顧。 – 2011-02-15 12:55:34

+0

我很驚訝,爲什麼我需要手動註冊。它應該由設施來處理。可能是我錯過了一些配置。我已按照此URL http://stw.castleproject.org/%28S%28ta5wga45q0nwdif0d3vk0saf%29%29/Windsor.NHibernate-Facility.ashx中描述的步驟操作。我敢肯定,我在Global.asax中做錯了什麼。任何想法? – user585014 2011-02-15 14:52:29

回答

3

ISessionManagerISessionFactoryResolver等都是由NHibernate的設施管理的組件。你不應該手動註冊它們。

您可以通過執行安裝從web.config中的設施:

container.Install(Configuration.FromAppConfig()); 

欲瞭解更多信息,請參閱reference docs about Configuration installers