J'essaye d'auto-lier MembershipProvider dans ASP.NET MVC 2, puis d'utiliser cette liaison dans un constructeur AccountController.Fournisseur d'appartenance auto-liant avec Ninject
C'est un extrait de mes Global.asax.cs
// selfbind MembershipProvider in request scope
Bind<MembershipProvider>().ToSelf().InRequestScope();
Et un extrait de la classe de service:
public AccountMembershipService(MembershipProvider provider, IAccountRepository accountRepository)
{
_provider = provider ?? Membership.Provider;
_accountRepository = accountRepository;
}
Mon problème est que l'injection ne fonctionne pas (l'injection pour AccountRepository fonctionne cependant). Ceci est l'erreur de 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.
Réglage InSingletonScope() ne fait aucune différence et je ne peux rien faire au sujet du constructeur puisque ce n'est pas un MembershipProvider personnalisé mais celui par défaut qui est livré avec ASP.NET.
Je suis coincé ici, je ne sais pas comment résoudre ce problème.
Oui, je pense que votre problème est avec le noyau se liant au fournisseur ... essayez ceci: Bind() Pour () InRequestScope().. ; Vous ne devriez pas avoir besoin de passer ce repo, il devrait être injecté dans le ctor de MembershipProvider ... c'est pourquoi vous avez besoin d'un vide et un avec votre repo là-dessus. –
CrazyDart
Je n'ai pas de fournisseur d'abonnement personnalisé pour le moment. Je veux utiliser le fournisseur Membership.Provider par défaut. Mais tout est prêt si nous mettons en place un fournisseur personnalisé à l'avenir. – mare
Hrmmm, je pense que vous devriez me marquer pour la réponse car j'avais raison que la reliure était mauvaise .... et je pourrais utiliser les points. – CrazyDart