加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 使用Ninject注册到自定义成员资格提供程序

发布时间:2020-12-16 00:39:18 所属栏目:asp.Net 来源:网络整理
导读:我试图在MVC 3中使用ninject注入一个自定义成员资格提供商。 在MembershipProvider我已经尝试了以下: [Inject]public ICustomerRepository _customerRepository{ get; set; } 和 [Inject]public TUMembershipProvider(ICustomerRepository customerReposito
我试图在MVC 3中使用ninject注入一个自定义成员资格提供商。

在MembershipProvider我已经尝试了以下:

[Inject]
public ICustomerRepository _customerRepository{ get; set; }

[Inject]
public TUMembershipProvider(ICustomerRepository customerRepository)
{
    _customerRepository = customerRepository;
}

在我的ninject模块中,我尝试了以下内容:

Bind<MembershipProvider>().ToConstant(Membership.Provider);

以上都没有。

当我使用(在global.asa中)

kernel.Inject(Membership.Provider);

和…一起

[Inject]
public ICustomerRepository _customerRepository{ get; set; }

它的工作原理,但是我没有生命周期管理,这将导致NHibernate的“ISession开放”错误,因为ISession是InRequestScope,而存储库不是。

解决方法

您可以使用方法 @Remo Gloor outlines in his blog post on provider injection.它涉及3个步骤:

>将[注入]添加到您需要注入的提供商上的任何属性(尽管他显示的模式 – 创建一个非常简单的类,其唯一的功能是容纳属性注入,并将任何请求转发到使用构造函数实现的实际类中注射 – 值得关注)

public class MyMembershipProvider : SqlMembershipProvider
{
    [Inject]
    public SpecialUserProvider SpecialUserProvider { get;set;}
    ...

>创建一个初始化程序包装器,它实现IHttpModule,它提供提供者,触发它的创建:

public class ProviderInitializationHttpModule : IHttpModule
{
    public ProviderInitializationHttpModule(MembershipProvider membershipProvider)
    {
    }
...

>在注册服务中注册IHttpModule:

kernel.Bind<IHttpModule>().To<ProviderInitializationHttpModule>();

>没有4;在启动过程中,Ninject执行其他操作 – 引导所有注册的IHttpModules,包括您添加的一个。

(不要忘记阅读博客帖子等等的评论)

最后,如果你正在寻找一个完全可以彻底解决这个问题的东西,请试试this @Remo Gloor answer instead

在整个混乱中,PS是一个伟大的写作是Provider is not a Pattern by @Mark Seemann.(和他的优秀的书籍 – Dependency injection in .NET,这将使你从第一原则舒适地弄清楚这个东西的oboligently插头)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读