Asp.Net标识上的Owin上下文



我对如何实现asp.net标识模板中的代码感到困惑。

private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
private ApplicationRoleManager _roleManager;
public AuthController() { }
public AuthController(ApplicationUserManager userManager, ApplicationSignInManager signInManager, ApplicationRoleManager roleManager)
{
    UserManager = userManager;
    SignInManager = signInManager;
    RoleManager = roleManager;
}
public ApplicationRoleManager RoleManager
{
    get { return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); }
    private set { _roleManager = value; }
}
public ApplicationSignInManager SignInManager
{
    get { return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>(); }
    private set { _signInManager = value; }
}
public ApplicationUserManager UserManager
{
    get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
    private set { _userManager = value; }
} 

为什么我们有带参数的AuthController?Depedency注射液的用途?如果没有发生注入,则调用Startup.cs上指定的owincontext?这是否意味着我们可以忽略owincontext而只使用注入?

当我试图调试它的运行方式时,它只是通过无参数构造函数,它破坏了我的代码。是否未使用此参数化构造函数?

知道吗?谢谢

事实上,这个模板是用于处理DI容器的,而不是用于处理所有情况。正如您所说,如果使用DI,则使用带参数的构造函数。

如果构造函数中没有提供任何内容,那么访问OWIN并获取所需对象的实例。

是的,如果你是一个使用DI的人,你可以用HttpContext.GetOwinContext()删除属性,只留下带参数的构造函数。

如果您使用DI,但控制器是通过无参数构造函数创建的,那么您没有为Asp.Net配置DependencyResolver。在Global.asax.cs中(或在任何进行DI配置的地方),您需要调用DependencyResolver.SetResolver(myContainerWrapper);,其中myContainerWrapperIDependencyResolver,并且您需要查找DI容器是如何与Asp.Net集成的。

相关内容

  • 没有找到相关文章

最新更新