Nhibernate S#arp体系结构-Rhino安全性(未映射类:Rhino.Security.IUser)

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>()

我使用的是S#arp架构1.6,并按照

我正在使用Rhino.Commons的最新版本

我的应用程序\u 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)); 

有人知道这个错误的原因吗

有人成功地将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())
        {
        }