代码之家  ›  专栏  ›  技术社区  ›  mare

具有Ninject的自绑定成员身份提供程序

  •  2
  • mare  · 技术社区  · 15 年前

    我正在尝试在ASP.NET MVC 2中自绑定MembershipProvider,然后在AccountController构造函数中使用此绑定。

    这是我的global.asax.cs中的一个片段

    // selfbind MembershipProvider in request scope
    Bind<MembershipProvider>().ToSelf().InRequestScope();
    

    以及服务类中的一个片段:

    public AccountMembershipService(MembershipProvider provider, IAccountRepository accountRepository)
    {
        _provider = provider ?? Membership.Provider;
        _accountRepository = accountRepository;
    }
    

    我的问题是注入不起作用(但AccountRepository的注入起作用)。这是来自ninject的错误:

    Error activating MembershipProvider using self-binding of MembershipProvider
    No constructor was available to create an instance of the implementation type.
    Activation path:
       3. Injection of dependency MembershipProvider into parameter provider of constructor of type AccountMembershipService
       2. Injection of dependency IMembershipService into parameter membershipService of constructor of type AccountController
       1. Request for IController
    
    Suggestions:
     1) Ensure that the implementation type has a public constructor.
     2) If you have implemented the Singleton pattern, use a binding with InSingletonScope() instead.
    

    设置insingletonscope()没有任何区别,我无法对构造函数做任何操作,因为它不是自定义成员身份提供程序,而是ASP.NET附带的默认成员身份提供程序。

    我被困在这里,不知道怎么解决这个问题。

    2 回复  |  直到 15 年前
        1
  •  4
  •   mare    15 年前

    好的,找到了。我错误地将MembershipProvider设置为Self,但无法正常工作,因为MembershipProvider是抽象类。

    这作品

    Bind<MembershipProvider>().ToConstant(Membership.Provider);
    
        2
  •  2
  •   CrazyDart    15 年前

    您需要在成员资格提供程序上创建一个空的ctor,并在其上创建一个存储库。这是假设您已经在内核中正确注册了成员资格提供程序…

        Bind<MembershipProvider>().To<YourMembershipProvider>();
        Bind<IMembershipService>().To<AccountMembershipService>();