IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

[MVC3] utilisation d'un custom membership provider et injection Ninject [Débutant(e)]


Sujet :

ASP.NET MVC

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [MVC3] utilisation d'un custom membership provider et injection Ninject
    Bonjour

    Pour débuter en ASP.NET MVC3, j'ai commencé à développer une petite application web de gestion de contenu. Je commence à m'attaquer à l'intégration d'un système d'authentification avec des utilisateurs.

    J'ai suivi ce tutoriel pour intégrer mes custom membership provider et role provider mais je suis bloqué au moment de l'injection du AccountRepository dans le membership provider...

    Dans le tuto, il est question de créer dans la classe Global.asax une internal class appelée NinjectModules et qui s'occupe de faire le binding entre mon repository et son interface.

    Hors, lorsque j'ai installé NinjectMVC3, le plugin a généré automatiquement une classe nommée NinjectMVC3 dans le dossier App_Start de mon application web. Cette classe statique contient une méthode appelée RegisterServices qui prend en paramètre un kernel et qui s'occupe déjà de faire le binding entre les repositories et leurs interfaces respectives.

    Du coup, je ne sais pas si je dois quand même utiliser cette classe interne NinjectModules dans global.asax. Or cette classe est utilisée pour instancier un kernel dans global.asax afin d'injecter le membership provider dans la méthode Application_start()...

    Etant encore débutant, j'ai un peu de mal à comprendre ce qui doit être fait. Pourriez-vous m'aider à y voir plus clair dans ce système d'injection et de binding?

    Merci

  2. #2
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    Bonjour,

    Cette classe (celle fourni par le plugin) est spécifique pour le MVC 3 et diffère donc de celle que l'on retrouve dans les tutos "classiques". Car les anciennes techniques ne marchaient pas avec le MVC 3. Donc oui il faut utiliser celle que te fourni Nuget (je suppose) et faire le binding dans RegisterServices. Pour continuer, au lancement de ton application Ninject fait le binding nécessaire en s'appuyant sur les services enregistrés dans le noyau (kernel).

    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    D'accord pour le binding.

    Mais dans ce cas, au niveau de l'injection du accountRepository dans le Membership.provider (ou l'inverse d'ailleurs, je n'ai pas bien compris à quoi ça sert? ), ou-est ce que je peux faire ça et comment je peux le faire?

  4. #4
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    dans RegisterServices:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bind<IAccountRepository>()
                    .To<AccountRepository>();
    Ce qui signifier que lorsque tu utilisera l'attribut Inject, l'interface IAccountRepository recevra automatiquement une instance de AccountRepository.

    Pour l'utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         public class Test
         {
              [Inject]
              public IAccountRepository testProp { get; set; }
     
              public void JeTestEncore()
             {
                   // sans besoin du new car injection de dépendance
                   testProp.UneMethode();
             }
         }
    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Ok donc si je comprend bien, en reprenant l'exemple de code qui se trouve dans le tuto cité dans mon premier post et qui se trouve dans la classe global.asax:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
        internal class MyNinjectModules : NinjectModule
        {
            public override void Load()
            {
                Bind<IAccountRepository>()
                    .To<AccountRepository>();
            }
        }
     
        public class MvcApplication : System.Web.HttpApplication
        {
            private IKernel _kernel = new StandardKernel(new MyNinjectModules());
     
    ...code deleted....
     
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
     
                RegisterGlobalFilters(GlobalFilters.Filters);
                RegisterRoutes(RouteTable.Routes);
     
                // Inject account repository into our custom membership provider.
                _kernel.Inject(Membership.Provider);
            }
        }
    Finalement, je n'ai pas besoin de l'internal class, et pour remplacer la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     // Inject account repository into our custom membership provider.
                _kernel.Inject(Membership.Provider);
    je dois ajouter dans la classe de mon provider une instance de IAccountRepository avec le tag [inject] comme tu me l'as montré, c'est bien ça?

  6. #6
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    A tester, je pense que cela marchera
    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Malheureusement, ça ne fonctionne pas. Lorsque je fais appel à mon membership provider pour valider ou créer un utilisateur, l'instance de AccountRepository est null.

    L'injection ne se fait pas.

    Edit:

    J'ai fini par utiliser la méthode donnée dans le tutoriel. Ca fonctionne mais je ne sais pas si c'est très propre comme façon de coder.
    J'ai posé la question à l'auteur du billet et je viendrai donner la réponse si j'en reçois une

    Edit 2:

    J'ai eu une réponse. L'auteur du billet m'a expliqué qu'il n'était pas nécessaire d'utiliser la classe interne NinjectModules si on utilise NinjectMVC.

    Le problème reste entier : (

  8. #8
    Membre régulier
    Avatar de Crooby
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 65
    Points : 114
    Points
    114
    Par défaut
    Voici un tuto pour NInject qui explique comment l'utiliser avec le MVC3
    http://blog.devdave.com/2011/02/gett...ith-mvc-3.html
    "Two turkeys do not make an eagle" Vic Gundotra

    Projet personnel:
    http://ntracker.codeplex.com/ - Framework d'injection de dépendances
    https://mayhemkinect.codeplex.com/ - Ajout du support de la Kinect pour Mayhem

    Quelque outils sympas:
    http://mayhem.codeplex.com/
    http://makemayhem.com/

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/05/2014, 20h53
  2. Custom Membership provider ne fonctionne pas..
    Par vantek59 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 26/01/2010, 11h25
  3. Réponses: 1
    Dernier message: 12/06/2009, 14h58
  4. Custom Membership provider
    Par neptune dans le forum ASP.NET
    Réponses: 1
    Dernier message: 07/06/2007, 09h58
  5. Custom Membership provider
    Par neptune dans le forum Framework .NET
    Réponses: 0
    Dernier message: 06/06/2007, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo