2010-10-14 68 views
2

我想在ASP.NET MVC 2自綁定MembershipProvider,然後在AccountController構造函數中使用此綁定。與Ninject自綁定成員資格提供商

這是從我的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()沒有什麼區別,並因爲這不是一個自定義的MembershipProvider但隨ASP.NET默認的一個我不能做的任何構造。

我被困在這裏,不知道如何解決這個問題。

回答

4

好吧,找到它了。我錯誤地將MembershipProvider設置爲self,因爲MembershipProvider是抽象類,所以無法工作。

這工作

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

您需要在成員資格提供程序上創建一個空的資源管理器,並在資源庫上創建一個資源庫。假設您已經正確註冊了會員供應商,並且內核也是正確的...

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

是的,我覺得你的問題是與內核綁定到供應商...試試這個:綁定<的MembershipProvider>()來()InRequestScope()。 ;你應該沒有必要通過該回購,它應該注入到MembershipProvider ctor ...這就是爲什麼你需要一個空的和一個回購它。 – CrazyDart 2010-10-14 17:15:52

+0

我目前沒有自定義會員供應商。我想要使​​用默認的Membership.Provider提供程序。但如果我們將來實施定製提供商,仍然有一切準備就緒。 – mare 2010-10-14 17:23:34

+0

Hrmmm,我認爲你應該標記我的答案,因爲我是正確的,綁定是不好的....我可以使用的要點。 – CrazyDart 2010-10-14 19:47:16

相關問題