2014-07-03 8 views
0

Я пытаюсь использовать этот код в мой контроллер:AuthenticationManager HttpContext является Null

IAccountManagementService<User> _service; 
public AccountController(IAccountManagementService<User> service) 
{ 
    _service = service; 
    _service.AuthenticationManager = HttpContext.GetOwinContext().Authentication; 
    _service.UserManager = new UserManager<User>(new UserStore<User>(new DefaultContext())); 
} 

И это был несколько скорректирован из кода происхождения шаблонного из шаблона для ASP.NET MVC 5

Its впрыскивается через Ninject, Ninject использует загрузчик распознавателя зависимостей и модуля:

var kernel = new StandardKernel(new ModuleLoader()); 

DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 

Так что я не знаю, если это это портя контекст.

Сервис только имеет оригинальный код абстрагированы в него, услуга выглядит следующим образом:

IRepository _repository; 
public AccountManagementService(IRepository repository) 
{ 
    _repository = repository; 
} 

public UserManager<User> UserManager { get; set; } 
public IAuthenticationManager AuthenticationManager { get; set; } 
public RoleManager<IdentityRole> RoleManager { get; set; } 

Исходный код выглядит примерно так:

public AccountController() 
      : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) 
{ 
} 

public AccountController(UserManager<ApplicationUser> userManager) 
{ 
    UserManager = userManager; 
} 

public UserManager<ApplicationUser> UserManager { get; private set; } 

private IAuthenticationManager AuthenticationManager 
{ 
    get 
    { 
     return HttpContext.GetOwinContext().Authentication; 
    } 
} 

Я мог бы впрыснуть IAuthenticationManager но на самом деле еще не изучили его должным образом.

Я просто не уверен, когда загружаю свой сайт, я нажимаю логин и берет меня в конструктор контроллера и указывает на начало строки: _service.AuthenticationManager и сообщает мне, что HttpContext имеет значение null.

ответ

1

Я исправил это, выполнив все мои инъекции зависимостей Ninject. Я теперь после конвенции для Ninject ИНГ MVC 5

Я добавил эти привязки для ASP.NET идентичности:

//<----- ACCOUNT STUFF ----->\\ 
kernel.Bind<IUserStore<EbpUser>>().To<UserStore<EbpUser>>().WithConstructorArgument("context", context => kernel.Get<DefaultContext>()); 
kernel.Bind<IRoleStore<IdentityRole, string>>().To<RoleStore<IdentityRole, string, IdentityUserRole>>().WithConstructorArgument("context", context => kernel.Get<DefaultContext>()); 

Чтобы затем получить HttpContext я переплетены в AuthenticationManager:

kernel.Bind<IAuthenticationManager>().ToMethod(c => HttpContext.Current.GetOwinContext().Authentication).InRequestScope(); 

Внутри моего AccountManagementService Я только что сделаю это сейчас:

IRepository _repository; 
IAuthenticationManager _authManager; 
UserManager<EbpUser> _userManager; 
RoleManager<IdentityRole> _roleManager; 

public AccountManagementService(IRepository repository, IUserStore<EbpUser> userStore, IRoleStore<IdentityRole, string> roleStore, IAuthenticationManager authManager) 
{ 
    _repository = repository; 
    _authManager = authManager; 
    _userManager = new UserManager<EbpUser>(userStore); 
    _roleManager = new RoleManager<IdentityRole>(roleStore); 
} 

Итак, теперь, когда все правильно впрыскивается, он выглядит намного опрятным.

Смежные вопросы