Архитектура S # arp - Rhino Security (не отображенный класс: Rhino.Security.IUser) - PullRequest
0 голосов
/ 11 октября 2010

Я использую 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 Architecture?

Любая помощь будет отличной.

Спасибо

Rich

- Дополнительные детали -

Спасибо за все ответы до сих пор.

Я до сих пор не смог решить эту проблему, поэтому подумал, что добавлю больше деталей.

В моем 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;
}

У меня есть атрибут AuthorizationAttribute, который вызывает

using (UnitOfWork.Start())

Ошибка возникает в NHibernateUnitOfWorkFactory.cs как

sessionFactory = cfg.BuildSessionFactory();

Ответы [ 3 ]

0 голосов
/ 12 октября 2010

Перед созданием SessionFactory необходимо разрешить RS выполнить некоторые настройки. Посмотрите на второй выпуск здесь http://groups.google.com/group/sharp-architecture/browse_frm/thread/4093c52596f54d23/194f19cd08c8fdd7?q=#194f19cd08c8fdd7. Это должно привести вас в правильном направлении.

0 голосов
/ 03 ноября 2010

Спасибо всем, кто помог.

В конце концов, это была моя вина.

Все, что мне нужно было сделать, - это следовать S # arp Архитектурным инструкциям немного лучше.

Из старой версии S # arp у меня было 2 конфигурационных файла: hibernate.cfg.xml и NHibernate.config.Я думал, что мне все еще нужны оба, но все, что мне было нужно, это hibernate.cfg.xml для S # arp версии 1.6 и отображение User.cs с использованием Fluent NHibernate.

Другие изменения, которые я сделал, были в 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())
        {
        }
0 голосов
/ 11 октября 2010

Вам нужно отображение NHibernate для вашего класса User (то есть класса, который реализует интерфейс IUser). Вам также нужна таблица в базе данных с правильными полями для вашего класса пользователя.

...