2017-05-05 42 views
2

我正在构建应用程序,将所有业务逻辑与控制器分离以分离库。我想从控制器中访问ApplicationUserManager,并且没有Request/OwinContext那里。 可能吗?如果是的话,使用DI容器注册ApplicationUserManager的更好方法是什么? (Autofac,ninject,等等)ApplicationUserManager超出控制器

+0

那怎么我所做的DI注册http://tech.trailmax.info/2014/09/aspnet-identity-and-ioc-container-registration/ – trailmax

回答

0

如果你想分开你的业务逻辑,那么你可以使用UserStoreUserManager。而我永远爱unity依赖注入。

例子:

public class UserRepository 
{ 
    private readonly UserStore _store; 
    private readonly UserManager _manager; 

    public UserRepository(DbContext context) 
    { 
     _store = new UserStore<ApplicationUser>(context); 
     _manager = new UserManager<ApplicationUser>(_store); 

    } 

    public async Task<ApplicationUser> GetUserByNameAsync(string username) 
    { 
     return await _store.FindByNameAsync(username); 
    } 

    public async Task<IEnumerable<ApplicationUser>> GetAllUsersAsync() 
    { 
     return await _store.Users.ToArrayAsync(); 

    } 
    public async Task CreateAsync(ApplicationUser user, string password) 
    { 
     await _manager.CreateAsync(user, password); 
    } 

    public async Task DeleteAsync(ApplicationUser user) 
    { 
     await _manager.DeleteAsync(user); 
    } 

    public async Task UpdateAsync(ApplicationUser user) 
    { 
     await _manager.UpdateAsync(user); 
    } 

    private bool _disposed = false; 
    public void Dispose() 
    { 
     if (!_disposed) 
     { 
      _manager.Dispose(); 
      _store.Dispose(); 
     } 

     _disposed = true; 
    } 
}