Comment configurer ASP.NET l'Identité ApplicationUserManager avec StructureMap
Je suis en utilisant asp.net l'identité dans mon projet et à l'aide de structuremap que le DI-cadre. le problème est que lorsque j'utilise le constructeur de l'injection puis ApplicationUserManager n'est pas configuré, tous les membres de l'e.g TokenProvider, ...
c'est mon ApplicationUserManager classe:
public class ApplicationUserManager : UserManager<User, long>
{
public ApplicationUserManager(IUserStore<User, long> store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new CustomUserStore(context.Get<InsuranceManagementContext>()));
//Configure the application user manager
manager.UserValidator = new UserValidator<User, long>(manager)
{
AllowOnlyAlphanumericUserNames = false,
RequireUniqueEmail = false
};
manager.PasswordValidator = new PasswordValidator
{
RequireDigit = true,
RequiredLength = 8,
RequireLowercase = false,
RequireNonLetterOrDigit = true,
RequireUppercase = false
};
var dataProtectionProvider = options.DataProtectionProvider;
if (dataProtectionProvider != null)
{
manager.UserTokenProvider =
new DataProtectorTokenProvider<User, long>(dataProtectionProvider.Create("TEST"));
}
return manager;
}
}
c'est le Démarrage.Auth classe:
public partial class Startup
{
//For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
public void ConfigureAuth(IAppBuilder app)
{
app.CreatePerOwinContext(InsuranceManagementContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
//Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
ExpireTimeSpan = TimeSpan.FromHours(2.0),
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
});
}
}
et sa ma AccountController:
public class AccountController : BaseController
{
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
public AccountController(ApplicationUserManager userManager)
{
UserManager = userManager;
}
}
ma question est comment puis-je configurer mon ApplicationUserManager avec structuremap?
si je l'ai mis comme le code ci-dessous, il fonctionne, mais je ne sais pas c'est une bonne solution ou pas:
ObjectFactory.Initialize(x =>
{
...
x.For<ApplicationUserManager>().Use(() => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>());
...
});
veuillez soupçon moi si il y a une meilleure solution et si il est ok, alors quel est le meilleure vie pour elle? HttpContextScope, Singleton, ...?
OriginalL'auteur Mohammad Zare | 2014-09-17
Vous devez vous connecter pour publier un commentaire.
Avant de créer le StructureMap de configuration pour cela, il est utile de savoir comment vous le créer manuellement, c'est à dire, si vous avez réellement "nouveau" tout vous-même.
UserManager a une dépendance sur IUserStore, et son EntityFramework de mise en œuvre (UserStore) a une dépendance sur DbContext.
Tout faire manuellement devrait ressembler à ceci:
(Remplacer
IdentityUser
avec votre utilisateur personnalisée, si vous en utilisez un)Vous pouvez ensuite configurer
UserManager
comme ceci:La partie la plus compliquée sur la configuration de userManager est liée à la UserTokenProvider (qui utilise l'api de protection des données), si vous voulez le faire manuellement, il serait ressembler à ceci:
Voici un exemple de StructureMap de registre (vous pouvez extrapoler à partir de cet exemple et de l'adapter à vos besoins):
J'ai écrit un blog post à ce sujet, il explique le processus qui mène à cette configuration, il y a aussi un lien vers un exemple sur github d'un projet MVC où, en utilisant cette configuration, vous pouvez créer et supprimer des utilisateurs.
OriginalL'auteur Rui