Use DI for Identity

This commit is contained in:
Hao Kung 2014-04-17 15:36:17 -07:00
parent e61107a381
commit 3c4a2df2cb
3 changed files with 12 additions and 23 deletions

View File

@ -1,4 +1,5 @@
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.DependencyInjection;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Security;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc.ModelBinding;
@ -11,20 +12,11 @@ namespace MusicStore.Controllers
//[Authorize]
public class AccountController : Controller
{
public AccountController()
//Bug: Using an in memory store
//: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
: this(new UserManager<ApplicationUser>(Startup.UserStore))
public UserManager<ApplicationUser> UserManager
{
get { return Context.ApplicationServices.GetService<UserManager<ApplicationUser>>(); }
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
public UserManager<ApplicationUser> UserManager { get; set; }
private SignInManager<ApplicationUser> _signInManager;
public SignInManager<ApplicationUser> SignInManager {
get

View File

@ -1,8 +1,8 @@
using System.Security.Principal;
using Microsoft.AspNet.Mvc;
using Microsoft.AspNet.Mvc;
using MusicStore.Models;
using System;
using System.Linq;
using System.Security.Principal;
using System.Threading.Tasks;
namespace MusicStore.Controllers

View File

@ -22,22 +22,18 @@ using System.IO;
public class Startup
{
/// <summary>
/// TODO: Temporary ugly work around (making this static) to enable creating a static InMemory UserManager. Will go away shortly.
/// </summary>
public static InMemoryUserStore<ApplicationUser> UserStore = new InMemoryUserStore<ApplicationUser>();
public static InMemoryRoleStore<IdentityRole> RoleStore = new InMemoryRoleStore<IdentityRole>();
private static void ConfigureServices(ServiceCollection services)
{
services.AddInstance<ILoggerFactory>(new NullLoggerFactory());
services.AddMvc();
services.AddInstance<UserManager<ApplicationUser>>(new UserManager<ApplicationUser>(new InMemoryUserStore<ApplicationUser>()));
services.AddInstance<RoleManager<IdentityRole>>(new RoleManager<IdentityRole>(new InMemoryRoleStore<IdentityRole>()));
}
public void Configuration(IBuilder app)
{
CreateAdminUser(app.ServiceProvider);
app.UseContainer(ConfigureServices);
//ErrorPageOptions.ShowAll to be used only at development time. Not recommended for production.
@ -67,6 +63,7 @@ public class Startup
app.UseRouter(routes);
SampleData.InitializeMusicStoreDatabaseAsync().Wait();
CreateAdminUser(app.ServiceProvider);
}
private async void CreateAdminUser(IServiceProvider serviceProvider)
@ -81,8 +78,8 @@ public class Startup
string _password = configuration.Get("DefaultAdminPassword");
string _role = "Administrator";
var userManager = new UserManager<ApplicationUser>(UserStore);
var roleManager = new RoleManager<IdentityRole>(RoleStore);
var userManager = serviceProvider.GetService<UserManager<ApplicationUser>>();
var roleManager = serviceProvider.GetService<RoleManager<IdentityRole>>();
var role = new IdentityRole(_role);
var result = await roleManager.RoleExistsAsync(_role);