VS2013,MVC5,VB
我帮助解决了在this post的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”短语?
有更长的方法来写这个更具解释性吗?
答案 0 :(得分:3)
以下代码行:
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
对象,它的constructor不带任何参数。 UserStore(Of ApplicationUser)
对象,它将已创建的ApplicationDbContext
对象作为其构造函数的参数。 UserManager(Of ApplicationUser)
对象,它将已创建的UserStore(Of ApplicationUser)
对象作为其构造函数的参数。类型名称的(Of ...)
部分是通用参数。 .NET支持generic types。 Of
之后的部分是泛型类的类型参数。因此,正如Dim x As New List(Of String)
创建字符串列表一样,UserStore(Of ApplicationUser)
会创建用于存储应用程序用户的用户存储。
答案 1 :(得分:3)
似乎您可能不了解语句中使用的泛型类型参数(this may help)。不确定这是否会有所帮助,但您可以将其分解为:
' 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)