创建UserManager实例的语法是什么?

时间:2015-03-02 19:12:46

标签: vb.net asp.net-mvc-5 asp.net-identity

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”短语?

有更长的方法来写这个更具解释性吗?

2 个答案:

答案 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)
  1. 第一步是创建一个新的ApplicationDbContext对象,它的constructor不带任何参数。
  2. 第二步是创建一个新的UserStore(Of ApplicationUser)对象,它将已创建的ApplicationDbContext对象作为其构造函数的参数。
  3. 第三步是创建一个新的UserManager(Of ApplicationUser)对象,它将已创建的UserStore(Of ApplicationUser)对象作为其构造函数的参数。
  4. 类型名称的(Of ...)部分是通用参数。 .NET支持generic typesOf之后的部分是泛型类的类型参数。因此,正如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)