Je construis une application Web asp.net MVC2 en utilisant StructureMap. J'ai créé un MembershipProvider personnalisé. Je reçois correctement initialisé au démarrage en appelant:Injection de référentiel dans MembershipProvider.Initialize()? Mauvaise idée?
x.For<MembershipProvider>().Use(Membership.Provider);
x.For<IMembershipProvider>().Use<CPOPMembershipProvider>();
En initialize(), je pense à l'instanciation d'un référentiel à utiliser pour l'accès aux données de l'utilisateur dans la base de données.
Alors, je mets dans une propriété privée dans mon MembershipProvider personnalisé:
private IUserRepository userRepository;
Et, à l'intérieur initialize(), je l'appelle:
IUserRepository userRepository = ObjectFactory.GetInstance<IUserRepository>();
D'abord, est-il "bonnes pratiques" à instancier un référentiel dans mon MembershipProvider personnalisé?
En second lieu, quand je mets en œuvre, il semble que je ne peux pas accéder à toutes les configurations de StructureMap qui a été configuré dans le global.asax. Quand j'appelle Debug.WriteLine (ObjectFactory.WhatDoIHave()) juste avant la ligne, aucune des données de configuration est présent (que je ne vois de la même ligne de débogage placé dans global.asax) GetInstance ci-dessus() et je reçois un " Aucune instance par défaut définie pour l'erreur PluginFamily CPOP.Domain.Contracts.Repositories.IUserRepository "lors de l'appel de GetInstance(). Pourquoi donc? On dirait que j'ai un conteneur différent dans MembershipProvider.
Exactement ce dont j'avais besoin. –