asp.net-mvc – ASP.NET MVC身份默认实现
带有“个人用户帐户”的VS 2013中的默认Wep应用程序带有一个帐户控制器,其中包含以下代码: public AccountController(ApplicationUserManager userManager,ApplicationSignInManager signInManager ) { UserManager = userManager; SignInManager = signInManager; } private ApplicationUserManager _userManager; public ApplicationUserManager UserManager { get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); } private set { _userManager = value; } } 和Startup.Auth.cs中的这一行 app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 我想了解什么机制将userManager参数传递给构造函数.我相信在这里使用dependendy注射模式. 对于UserManager部分,我们为什么要测试_userManager是否为null,如果它已在控制器中设置的话? 解决方法您已经找到了负责执行依赖注入的代码. app.CreatePerOwinContext()是用于在Owin管道中注册usermanager(创建用户管理器的委托)的代码,该管道实际上只是保存在HttpContext中的字典.您可以在此blogpost中深入了解此机制的工作原理. 关于你完全理解的其他问题!如果注入依赖项,为什么要检查null?好吧:那是因为Owin在这里被用作穷人的DI机制,你在默认项目模板中看到的实际上是一个带有service locator anti pattern气味的回退机制.因为使用Owin而不是一个体面的DI容器,MVC管道需要一个默认构造函数,因此需要检查null和服务定位器. MVC如何决定使用哪个构造函数对我来说并不清楚.但我发现用户管理器有时会被注入,而在其他场景中则为null.可能是因为owin上下文大部分时间仅在创建Account控制器后可用. 虽然模板开箱即用,但它确实会让我的眉毛移动,就像移动你的模板一样.所以我带着一个像样的DI容器的干净实现,并删除了大部分owin服务定位器的东西. 如果您感兴趣,可以找到我使用Simple Injector的解决方案here.还有其他DI容器here的解决方案 (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – LabelFor和TextBoxFor不生成相同的id
- asp.net – 如何从TableAdapter中检索存储过程返回值
- asp.net-mvc – 允许asp.net mvc 2控制器名称的URL中的连字
- 如何使用ASP.NET MVC Web API OData链接到Razor中的OData集
- asp.net-mvc – 在MVC ActionLink中使用Knockout绑定
- asp.net-mvc – 尝试创建类型为’TypeNewsController’的控
- asp.net-mvc – 将List参数传递到ASP.NET MVC3中的自定义操
- asp.net-mvc – 通过Gitignore递归地包含Nuget DLL
- asp.net-mvc – 使用ASP.NET MVC进行项目组织的最佳实践
- iis-7.5 – 使用虚拟目录/应用程序在IIS中托管ASP.NET 5 We
- asp.net-core – 加密ASP.Net Core中的连接字符串
- asp.net-mvc – ASP.Net [HiddenInput]数据属性在
- 在ASP.NET中,什么决定了HostingEnvironment.IsDe
- global-variables – MVC 3 Razor _ViewStart中的
- asp.net-mvc-3 – MVC 3 $.ajax – 响应似乎是从
- asp.net 删除项目文件/文件夹IIS重启,Session丢
- asp.net – 允许服务器/ usercontrol上的任何属性
- asp.net-mvc – 无法更改关系,因为一个或多个外键
- Asp.Net MVC路由表和控制器操作
- asp.net – jquery getJson没有将任何值传递给控