
[英]Injecting Correct ISessionFactory Into IRepository Using Castle Windsor and NHibernate Facility
[英]Configure Castle Windsor Container and Nhibernate using Nhibernate Facility
我正在尝试使用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 堆栈跟踪:[FacilityException:未为指定的别名映射ISessionFactory组件:nh.facility.default] Castle.Facilities.NHibernateIntegration.Internal.SessionFactoryResolver。 GetSessionFactory(字符串别名)+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.ExecuteStep(IExecutionStep步骤,布尔值和已同步完成)+75 *
我不知道我在配置中缺少什么。 有什么想法吗?
谢谢
伊姆兰
ISessionManager
, ISessionFactoryResolver
等是由NHibernate工具管理的组件。 您不应该手动注册它们。
您可以通过以下操作从该web.config安装该工具:
container.Install(Configuration.FromAppConfig());
有关更多信息,请参阅有关Configuration installers的参考文档 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.