Utilisation du conteneur IOC avec IdentityFactory Middleware

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.