VS2013、MVC5、VB
在这篇文章中,我帮助解决了在MVC5应用程序的种子方法中创建用户的问题。
这个问题是问这行代码是怎么回事,它是正确工作的:
Dim myUserManager = New UserManager(Of ApplicationUser)(New UserStore(Of ApplicationUser)(New ApplicationDbContext))
下面解释一下我不明白的地方。我会把它分解成我理解的东西,然后再把我不理解的东西分解出来。
New UserManager(Of ApplicationUser)... is creating an instance of UserManager, yes?
之后,还有2个"新事物"
... (New UserStore(Of ApplicationUser)(New ApplicationDbContext))
我不懂那个语法。在一个新的UserStore中有一个完整的括号,后面是一组新上下文的括号。
这是我不了解的部分。我缺乏理解的部分原因是(1)这种类型的语法通常意味着什么,另一部分是(2)为什么在这种情况下需要这种语法。
"New UserStore"是干什么的,然后是后面的"New"短语?
有没有一种更长的方式来写这篇文章,更具解释性?
您似乎不了解语句中使用的泛型类型参数(这可能会有所帮助)。不确定这是否会有所帮助,但你可以这样分解:
' Create an instance of ApplicationDbContext.
' The parens were missing in the original.
Dim context = New ApplicationDbContext()
' Create an instance of the generic type UserStore(Of T), with
' ApplicationUser as the type parameter, T.
' The type of userStore is therefore UserStore(Of ApplicationUser).
' context is passed as a parameter to the constructor.
Dim userStore = New UserStore(Of ApplicationUser)(context)
' Create an instance of the generic type UserManager(Of T), with
' ApplicationUser as the type parameter, T.
' The type of myUserManager is therefore UserManager(Of ApplicationUser).
' userStore is passed to the constructor as a parameter
Dim myUserManager = New UserManager(Of ApplicationUser)(userStore)
以下代码行:
Dim myUserManager = New UserManager(Of ApplicationUser)(New UserStore(Of ApplicationUser)(New ApplicationDbContext))
相当于:
Dim myApplicationDbContext As New ApplicationDbContext
Dim myUserStore As New UserStore(Of ApplicationUser)(myApplicationDbContext)
Dim myUserManager = New UserManager(Of ApplicationUser)(myUserStore)
- 第一步是创建一个新的
ApplicationDbContext
对象,该对象的构造函数不带任何参数 - 第二步是创建一个新的
UserStore(Of ApplicationUser)
对象,它将已经创建的ApplicationDbContext
对象作为其构造函数的参数 - 第三步是创建一个新的
UserManager(Of ApplicationUser)
对象,它将已经创建的UserStore(Of ApplicationUser)
对象作为其构造函数的参数
类型名称的(Of ...)
部分是一个泛型参数。NET支持泛型类型。Of
之后的部分是泛型类的类型参数。因此,正如Dim x As New List(Of String)
创建字符串列表一样,UserStore(Of ApplicationUser)
创建用于存储应用程序用户的用户存储。