J’essaie de comprendre le middleware UserManagerFactory expliqué ici par gestion de la durée de vie des requêtes pour usermanager .
J’ai créé cette classe que j’appelle à partir de la méthode de configuration de démarrage
public class CustomUserManagerProvider { public static CustomUserStore CreateCustomUserStore() { return new CustomUserStore(/*Need to inject dependencies here*/); } public static CustomUserManager CreateCustomUserManager(IdentityFactoryOptions options, IOwinContext context) { return new CustomUserManager(context.Get<CustomUserStore>()); } }
Et la configuration de démarrage
public void Configuration(IAppBuilder app) { app.CreatePerOwinContext(CustomUserManagerProvider.CreateCustomUserStore); app.CreatePerOwinContext(CustomUserManagerProvider.CreateCustomUserManager); ////....Other things }
Maintenant, My CustomUserStore a quelques dépendances que je veux injecter dans le constructeur.
La racine de composition du conteneur IOC sait comment résoudre ces dépendances.
Comment informer le CustomUserManagerProvider
DI CustomUserManagerProvider
DI (si cela a du sens) …
Bien que cela fonctionne
public static CustomUserStore CreateCustomUserStore() { var dependency = DependencyResolver.Current.GetService(); return new CustomUserStore(dependency); }
Mais j’essayais d’éviter le modèle (anti) de localisateur de service. Est-ce ma seule option, est-ce encore vrai?
J’utilise Ninject.
Puis-je créer un UserManager dans requestScope à la racine de la composition et l’injecter dans les contrôleurs, n’est-ce pas la même chose?
Dans une application Web, CreatePerOwinContext est-il identique à la création de InRequestScope?
Oui, vous pouvez injecter UserManager dans vos contrôleurs différemment si vous le souhaitez. Rien ne nécessite l’utilisation de CreatePerOwinContext / IdentityFactoryMiddleware.