0

私はS#arp Architecture 1.6を使用しており、RhinoSecurity統合を次のように実装しています。

Rhinoセキュリティ-S#arpアーキテクチャ

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;
}

を呼び出すAuthorizationAttributeがあります

using (UnitOfWork.Start())

エラーはNHibernateUnitOfWorkFactory.csで次のように発生しています。

sessionFactory = cfg.BuildSessionFactory();
4

3 に答える 3

0

を作成する前に、RSにいくつかの構成作業を行わせる必要がありますSessionFactory。ここで2番目の問題を見てくださいhttp://groups.google.com/group/sharp-architecture/browse_frm/thread/4093c52596f54d23/194f19cd08c8fdd7?q=#194f19cd08c8fdd7。それはあなたを正しい方向に導くはずです。

于 2010-10-12T08:37:48.270 に答える
0

Userクラス(つまり、IUserインターフェイスを実装するクラス)のNHibernateマッピングが必要です。また、Userクラスの正しいフィールドを含むデータベース内のテーブルも必要です。

于 2010-10-11T13:37:42.370 に答える
0

助けてくれたすべての人に感謝します。

結局、それは私自身のせいでした。

私がする必要があるのは、S#arpアーキテクチャの指示に従うことだけでした。

古いバージョンのS#arpから、2つの構成ファイルhibernate.cfg.xmlとNHibernate.configがありました。まだ両方が必要だと思いましたが、必要なのはS#arpバージョン1.6のhibernate.cfg.xmlと、FluentNHibernateを使用して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())
        {
        }
于 2010-11-03T05:43:32.727 に答える