Настройте Castle Windsor Container и Nhibernate с помощью Nhibernate Facility - PullRequest
1 голос
/ 15 февраля 2011

Я пытаюсь настроить Nhibernate с помощью Castle Windsor Container, используя Nhibernate Facility.Но у меня

Вот мой 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 Трассировка стека: [FacilityException: Компонент ISessionFactory не был сопоставлен для указанногопсевдоним: nh.facility.default] Castle.Facilities.NHibernateIntegration.Internal.SessionFactoryResolver.GetSessionFactory (псевдоним строки) +147 Castle.Facabilities.NHibernateIntegration.DefaultSessionManager.CreateSession (псевдоним String.Hean.InEСтроковый псевдоним) +150 Castle.Facilities.NHibernateIntegration.DefaultSessionManager.OpenSession () +37 Castle.Facilities.NHibernateIntegration.Components.Web.SessionWebModule.OnBeginRequest (отправитель объекта, EventArgs e) +124 System.WebExSynSec.HttpApplication.IExecutionStep.Execute () +148 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое и завершено синхронно) + 75 *

Я не знаю, чего мне не хватает в конфигурации.Есть мысли?

Спасибо

Имран

1 Ответ

3 голосов
/ 15 февраля 2011

ISessionManager, ISessionFactoryResolver и т. Д. Являются компонентами, управляемыми средством NHibernate. Вы не должны регистрировать их вручную.

Вы можете установить средство из этого web.config, выполнив:

container.Install(Configuration.FromAppConfig());

Для получения дополнительной информации см. Справочные документы об установщиках конфигурации .

.
...