1

我正在尝试在我的 MVC 控制器中关注:

Private ProductRepoitory As IProductRepository
Sub New()
    Me.New(New productsRepository(New ModelStateWrapper(Me.ModelState)))
End Sub

Sub New(ByVal repo As productsRepository)
    ProductRepoitory = repo
End Sub

但是,此行会引发以下错误消息:

Me.New(New productsRepository(New ModelStateWrapper(Me.ModelState)))

调用另一个构造函数时,对正在构造的对象的隐式引用无效

我明白,我在构造函数中调用构造函数,而其他构造函数需要一个参数,它是失败的参数部分。

删除“我”没有帮助,我需要将控制器的 ModelState 作为参数传递给 ModelStateWrapper 类,还有其他解决方法吗?

4

2 回答 2

3

在你调用之前Me.New(),你的对象还没有被构造。
因此,您无法访问Me.

于 2013-11-13T23:16:19.923 回答
2

Me.ModelState使用. 创建构造函数链时不能使用Me.New。另一种方法是创建一个像这样的“初始化”方法:

Private ProductRepoitory As IProductRepository
Sub New()
    Me.Initialize(New productsRepository(New ModelStateWrapper(Me.ModelState)))
End Sub

Sub New(ByVal repo As productsRepository)
    Me.Initialize(repo)
End Sub

Private Sub Initialize(ByVal repo As productsRepository)
    Me.ProductRepoitory = repo
End Sub

还要注意,除非Me.ModelState是一个属性并且getter方法对值进行了某种初始化,然后当你将它传递给Initialize方法时,Me.ModelState它将为空。这种模式很可能会在以后给您带来一些问题,因此您可能需要考虑稍微重构一下您的代码。

于 2013-11-13T23:20:15.720 回答