gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:55:37 25 4
gpt4 key购买 nike

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

我想用以下方式实现自定义的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();
...
}
}

关于nhibernate - 如何设置自定义成员(member)提供程序类以使用存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6163134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com