nhibernate之如何设置自定义成员(member)提供程序类以使用存储库

mengfanrong 阅读:44 2025-06-02 22:19:02 评论:0

嘿,这是我的第一篇文章,所以我请求理解。我看了很多帖子,但我没有找到解决方案。

我想用以下方式实现自定义的membershipProvider类:

namespace Mvc_car.Authorization  
{ 
public class SimpleMembershipProvider : MembershipProvider 
{ 
    private NHibernateRepository<Uzytkownik> repo; 
 
    ISession session; 
 
    [Inject] 
    public SimpleMembershipProvider(ISession session) 
    { 
        this.session = session; 
    } 
 
    public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config) 
    { 
        repo = new NHibernateRepository<Uzytkownik>(session); 
        base.Initialize(name, config); 
    } 

我的绑定(bind):
kernel.Bind<ISession>().ToMethod(x => MvcApplication.SessionFactory.OpenSession()).InRequestScope(); 
kernel.Bind(typeof(IRepository<>)).To(typeof(NHibernateRepository<>)); 
kernel.Inject(Membership.Provider); //either with or without that 

我在 web.config 中进行了更改:
<membership defaultProvider="MyMembershipProvider"> 
  <providers> 
    <clear/> 
    <add name="MyMembershipProvider" type="Mvc_car.Authorization.SimpleMembershipProvider"/> 
  </providers> 
</membership> 

尝试记录以下错误后:

This method cannot be called during the application's pre-start initialization stage.

请您参考如下方法:

解决方案非常简单。在包含 PreApplicationStartMethod 属性的类中,添加一个像这样的静态方法。

 public static class NinjectWebCommon  
 { 
        public static void InjectProviders() 
        { 
            Bootstrapper.Kernel.Inject(Membership.Provider); 
            Bootstrapper.Kernel.Inject(Roles.Provider); 
        } 
 
    ... 
 
 } 

设置提供程序时,不要通过构造函数注入(inject)依赖项。而是使用像这样的 [Inject] 属性来装饰属性。
public class DefaultMembershipProvider : MembershipProvider 
{ 
    [Inject] 
    public IUserRepository UserRepository { get; set; } 
} 

之后,它就像从 global.asax Application_Start() 方法调用 NinjectWebCommon.InjectProviders() 一样简单。
public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
        NinjectWebCommon.InjectProviders(); 
        ... 
    } 
} 


标签:hibernate
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号