Asp.net mvc 5 ASp.net identity 2.0示例-控制器构造函数、DB构造函数和Owin中间件的重用
我已从此处引用的链接安装了asp.net identity 2.0示例: 还有一些关于样品和最佳实践的具体问题。我意识到这些样本是beta版的,因此这可以解释我的一些担忧\问题 1) 为什么大多数控制器构造函数(例如AccountController)都在其构造函数中引用UserManager类的实例。我看不到任何DI,控制器也有一个UserManager类型的公共属性,它从Owin上下文中获取该属性的缓存实例。这仅仅是(糟糕的)脚手架的产物,还是我遗漏了一些微妙的DI 2) 我希望使用其他特定于应用程序的数据来扩充ApplicationUser和ApplicationDBContext。要获取当前ApplicationDBContext类的副本,似乎必须获取当前Owin上下文,然后从该上下文获取ApplicationDBContext的副本。这是正确的吗?我正在考虑使用ApplicationDBContext属性和UserManager属性创建基本控制器类,这些属性遵循AccountController中演示的模式,然后从中继承需要这些属性的控制器 3) 每个HTTP请求都需要applicationdbcontext的隐式假设是否有效?这不是浪费吗 4) 最后,我希望添加ApprovedByAdmin属性,该属性仅允许用户在其注册已获得管理员批准的情况下登录。我设想将此添加到applicationuser。基于登录方法的示例,通过UserManager类对各种属性进行检查,例如Asp.net mvc 5 ASp.net identity 2.0示例-控制器构造函数、DB构造函数和Owin中间件的重用,asp.net-mvc-5,asp.net-identity,Asp.net Mvc 5,Asp.net Identity,我已从此处引用的链接安装了asp.net identity 2.0示例: 还有一些关于样品和最佳实践的具体问题。我意识到这些样本是beta版的,因此这可以解释我的一些担忧\问题 1) 为什么大多数控制器构造函数(例如AccountController)都在其构造函数中引用UserManager类的实例。我看不到任何DI,控制器也有一个UserManager类型的公共属性,它从Owin上下文中获取该属性的缓存实例。这仅仅是(糟糕的)脚手架的产物,还是我遗漏了一些微妙的DI 2) 我希望使用其他特
UserManager.IsLockedOutAsync(user.Id))
UserManager.CheckPasswordAsync(user, password))
我不知道为什么这些都是作为单独的异步调用来完成的,但是由于我无法修改UserManager,我是否必须执行以下操作:
var user = await UserManager.FindByNameAsync(userName);
if(!user.ApprovedByAdmin)
{
....
}
我想这就是我现在所有的问题
答案很清楚。关于第3点-这是否意味着经常进行数据库检查以检查过期的用户cookie?第二个问题是关于第二点。如果我的存储库类都需要ApplicationDBContext(不一定用于usermanager),那么我是否应该尝试从Owin上下文中获取这些类。有没有一种简单的方法可以在没有基本控制器的情况下实现这一点。通常情况下,这将通过DI容器完成,但这里似乎使用Owin来部分完成。你能提供一个真实世界的样本吗?例如,Contoso应用程序是asp.net上MVC教程示例的基础。它可以配置数据库检查的频率(每30分钟一次可能是合理的默认设置)。是的,这基本上是一个穷人的DI,因为没有我们可以依赖的框架DI。在Asp.net的vnext中,这将通过DI完成。