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



