Ich benutze asp.net Identität in meinem Projekt und mit structurmap als DI-Framework. das Problem ist, wenn ich Konstruktor Injektion verwenden dann ApplicationUserManager nicht all seine Mitglieder, zB TokenProvider konfiguriert, ...Wie konfiguriert man ASP.NET Identity ApplicationUserManager mit StructureMap
das ist mein ApplicationUserManager Klasse:
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;
}
}
dies Startup.Auth Klasse:
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"),
});
}
}
und seine meinem Account:
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;
}
}
mein qu Wie kann ich meinen ApplicationUserManager mit Strukturmap konfigurieren? , wenn ich es als Code unten gesetzt funktioniert es, aber ich weiß nicht, es ist eine gute Lösung ist oder nicht:
ObjectFactory.Initialize(x =>
{
...
x.For<ApplicationUserManager>().Use(() => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>());
...
});
bitte mich andeuten, wenn es eine bessere Lösung ist, und ob es in Ordnung ist, was ist dann die beste lebensdauer dafür? HttpContextScope, Singleton, ...?
Ich habe gerade über Identity und DI-Container gebloggt: http://tech.trailmax.info/2014/09/aspnet-identity-and-ioc-container-registration/ das wird Ihnen wahrscheinlich helfen. – trailmax