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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 使用Ninject注册到自定义成员资格提供程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在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插头)

原文链接:https://www.f2er.com/aspnet/252845.html

猜你在找的asp.Net相关文章