在Asp .Net身份上的Owin Context

时间:2016-08-02 06:19:08

标签: c# asp.net asp.net-identity

我对如何实现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?依赖注入的目的?如果没有注入,那么调用在 Startup.cs 上指定的owincontext?这是否意味着我们可以忽略owincontext并仅使用注入?

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

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:1)

实际上,这个模板用于处理DI容器而没有一个 - 用于覆盖所有情况。如上所述 - 如果使用DI,则使用带参数的构造函数。

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

是的,如果您正在使用DI,则可以使用HttpContext.GetOwinContext()删除属性,并将构造函数保留为参数。

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