Nhibernate S#arp体系结构-Rhino安全性(未映射类:Rhino.Security.IUser)
我使用的是S#arp架构1.6,并按照 我正在使用Rhino.Commons的最新版本 我的应用程序\u EndRequest方法包含Nhibernate S#arp体系结构-Rhino安全性(未映射类:Rhino.Security.IUser),nhibernate,s#arp-architecture,rhino-security,Nhibernate,S#arp Architecture,Rhino Security,我使用的是S#arp架构1.6,并按照 我正在使用Rhino.Commons的最新版本 我的应用程序\u EndRequest方法包含 ISession session = NHibernateSession.Current; 我的ComponentRegister.cs包含 container.Kernel.Register( Component.For<IAuthorizationService>()
ISession session = NHibernateSession.Current;
我的ComponentRegister.cs包含
container.Kernel.Register(
Component.For<IAuthorizationService>()
.ImplementedBy<AuthorizationService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IAuthorizationRepository>()
.ImplementedBy<AuthorizationRepository>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IPermissionsBuilderService>()
.ImplementedBy<PermissionsBuilderService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IPermissionsService>()
.ImplementedBy<PermissionsService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHibernateUnitOfWorkFactory>()
.LifeStyle.Is(LifestyleType.Singleton),
Component.For<Rhino.Commons.IRepository<User>>()
.ImplementedBy<NHRepository<User>>()
.LifeStyle.Is(LifestyleType.Transient)
);
container.AddFacility<FactorySupportFacility>()
.Register(Component.For<ISession>()
.UsingFactoryMethod(() => NHibernateSession.Current)
.LifeStyle.Is(LifestyleType.Transient));
是
有人知道这个错误的原因吗
有人成功地将Rhino.Security与S#arp架构集成在一起了吗
任何帮助都会很好
谢谢
丰富的
--其他详细信息--
感谢所有到目前为止的回复
我仍然无法解决这个问题,所以我想我应该添加更多细节
在我的Global.asax.cs中
private void InitializeNHibernateSession()
{
NHibernateSession.Init(
webSessionStorage,
new string[] { Server.MapPath("~/bin/SwitchSnapshot.Data.dll") },
new AutoPersistenceModelGenerator().Generate(),
Server.MapPath("~/NHibernate.config"),
null, null, new RhinoSecurityPersistenceConfigurer());
}
RhinoSecurityPersistenceConfigurator:
public Configuration ConfigureProperties(Configuration nhibernateConfig)
{
Security.Configure<User>(nhibernateConfig, SecurityTableStructure.Prefix);
return nhibernateConfig;
}
错误发生在NHibernateUnitOfWorkFactory.cs中
sessionFactory = cfg.BuildSessionFactory();
您的用户类(即实现IUser接口的类)需要NHibernate映射。您还需要在数据库中为您的用户类提供一个包含正确字段的表。在创建
会话工厂之前,您必须让RS进行一些配置工作。看看第二个问题。这会让你走上正确的方向。感谢所有帮助你的人
最后是我自己的错
我所需要做的就是更好地遵循规则
在旧版本的S#arp中,我有两个配置文件hibernate.cfg.xml和NHibernate.config。我想我仍然需要这两个,但我所需要的只是S#arp版本1.6的hibernate.cfg.xml和使用Fluent NHibernate映射User.cs
我做的其他更改是在ComponentRegister.cs中
container.Kernel.Register(
Component.For<IAuthorizationService>()
.ImplementedBy<AuthorizationService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IAuthorizationRepository>()
.ImplementedBy<AuthorizationRepository>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IPermissionsBuilderService>()
.ImplementedBy<PermissionsBuilderService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IPermissionsService>()
.ImplementedBy<PermissionsService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHibernateUnitOfWorkFactory>()
.LifeStyle.Is(LifestyleType.Singleton),
Component.For<Rhino.Commons.IRepository<User>>()
.ImplementedBy<NHRepository<User>>()
.LifeStyle.Is(LifestyleType.Transient)
);
container.Kernel.AddFacility<FactorySupportFacility>()
.Register(Component.For<ISession>()
.UsingFactoryMethod(() => NHibernateSession.Current)
.LifeStyle.Is(LifestyleType.Transient)
);
container.Kernel.Register(
用于()的组件
.由()实施
.LifeStyle.Is(LifestyleType.Transient),
用于()的组件
.由()实施
.LifeStyle.Is(LifestyleType.Transient),
用于()的组件
.由()实施
.LifeStyle.Is(LifestyleType.Transient),
用于()的组件
.由()实施
.LifeStyle.Is(LifestyleType.Transient),
用于()的组件
.由()实施
.lifety.Is(lifetyletype.Singleton),
用于()的组件
.由()实施
.LifeStyle.Is(LifestyleType.Transient)
);
container.Kernel.AddFacility()
.Register(Component.For())
.UsingFactoryMethod(()=>NHibernateSession.Current)
.LifeStyle.Is(LifestyleType.Transient)
);
然后在我的代码中使用以下命令
var authorizationService = IoC.Resolve<IAuthorizationService>();
using (UnitOfWork.Start())
{
}
var authorizationService=IoC.Resolve();
使用(UnitOfWork.Start())
{
}
谢谢Dan,我在user.hbm.xml中映射了用户类和实现IUser的用户类,它们都正确映射到了数据库字段。您不应该映射IUser接口吗?他说,这就是错误所在。只是猜测Rhino不起作用,但错误通常是类/接口没有正确映射。您必须调用安全性。在配置InHibernate
之后,但在BuildSessionFactory
之前进行配置。要做到这一点,您必须对S#arpArch的NHibernateSession
源文件做一点小小的更改。在nsamespace中,我可以找到您在IoC.Resolve()中使用的类IoC嗨,您上面提供的链接不再指向Rhino.Security说明。您知道这些说明的其他来源吗?谢谢
sessionFactory = cfg.BuildSessionFactory();
container.Kernel.Register(
Component.For<IAuthorizationService>()
.ImplementedBy<AuthorizationService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IAuthorizationRepository>()
.ImplementedBy<AuthorizationRepository>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IPermissionsBuilderService>()
.ImplementedBy<PermissionsBuilderService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IPermissionsService>()
.ImplementedBy<PermissionsService>()
.LifeStyle.Is(LifestyleType.Transient),
Component.For<IUnitOfWorkFactory>()
.ImplementedBy<NHibernateUnitOfWorkFactory>()
.LifeStyle.Is(LifestyleType.Singleton),
Component.For<Rhino.Commons.IRepository<User>>()
.ImplementedBy<NHRepository<User>>()
.LifeStyle.Is(LifestyleType.Transient)
);
container.Kernel.AddFacility<FactorySupportFacility>()
.Register(Component.For<ISession>()
.UsingFactoryMethod(() => NHibernateSession.Current)
.LifeStyle.Is(LifestyleType.Transient)
);
var authorizationService = IoC.Resolve<IAuthorizationService>();
using (UnitOfWork.Start())
{
}