我正在使用S#arp Architecture 1.6并按照
实施了Rhino Security集成Rhino Security - S#arp Architecture
我正在使用Rhino.Commons的最新版本
我的Application_EndRequest方法包含
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));
我还按照说明添加了RhinoSecurityPersistenceConfigurer()。
我在接听电话时收到的错误
UnitOfWork.Start()
是
An association from the table Permissions refers to an unmapped class: Rhino.Security.IUser
有谁知道这个错误的原因是什么?
有没有人成功将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());
}
RhinoSecurityPersistenceConfigurer:
public Configuration ConfigureProperties(Configuration nhibernateConfig)
{
Security.Configure<User>(nhibernateConfig, SecurityTableStructure.Prefix);
return nhibernateConfig;
}
我有一个调用
的AuthorizationAttributeusing (UnitOfWork.Start())
错误发生在NHibernateUnitOfWorkFactory.cs中
sessionFactory = cfg.BuildSessionFactory();
答案 0 :(得分:0)
您的User类需要一个NHibernate映射(即实现IUser接口的类)。您还需要数据库中的表,其中包含User类的正确字段。
答案 1 :(得分:0)
在创建SessionFactory
之前,您必须让RS执行一些配置工作。请看这里的第二个问题http://groups.google.com/group/sharp-architecture/browse_frm/thread/4093c52596f54d23/194f19cd08c8fdd7?q=#194f19cd08c8fdd7。它应该让你朝着正确的方向前进。
答案 2 :(得分:0)
感谢所有帮助过的人。
最后这是我自己的错。
我需要做的就是更好地关注S#arp Architecture Instructions。
从旧版本的S#arp我有2个配置文件hibernate.cfg.xml和NHibernate.config。我以为我仍然需要两者,但我需要的只是hibernate.cfg.xml用于S#arp版本1.6并使用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)
);
然后在我的代码中使用以下内容。
var authorizationService = IoC.Resolve<IAuthorizationService>();
using (UnitOfWork.Start())
{
}