के साथ एएसपी.NET पहचान अनुप्रयोग यूज़र प्रबंधक को कॉन्फ़िगर कैसे करें मैं अपनी परियोजना में एएसपीनेट पहचान का उपयोग कर रहा हूं और संरचना ढांचे का उपयोग डी फ्रेमवर्क के रूप में कर रहा हूं। समस्या यह है जब मैं निर्माता इंजेक्शन का उपयोग तो ApplicationUserManager यह सदस्यों के सभी कॉन्फ़िगर नहीं किया गया जैसे TokenProvider, ...स्ट्रक्चर मैप
यह मेरा ApplicationUserManager वर्ग है:
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"),
});
}
}
:
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;
}
}
इस Startup.Auth वर्ग है
और उसके मेरी 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;
}
}
मेरी qu estion यह है कि मैं अपने अनुप्रयोग यूज़र प्रबंधक को structmap के साथ कैसे कॉन्फ़िगर कर सकता हूं? अगर मैं नीचे दिए गए कोड यह काम करता है के रूप में सेट, लेकिन मैं यह एक अच्छा समाधान है या नहीं पता नहीं है:
ObjectFactory.Initialize(x =>
{
...
x.For<ApplicationUserManager>().Use(() => HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>());
...
});
कृपया मुझे संकेत अगर वहाँ एक बेहतर समाधान है और अगर यह ठीक है तो क्या है इसके लिए सबसे अच्छा जीवनकाल? HttpContextScope, सिंगलटन, ...?
मैंने अभी पहचान और डी-कंटेनर के बारे में ब्लॉग किया है: http://tech.trailmax.info/2014/09/aspnet-identity-and-ioc-container-registration/ इससे शायद आपकी मदद मिलेगी। – trailmax