Ninject - 将ModelState注入服务?

时间:2011-03-11 19:23:52

标签: asp.net-mvc ninject

我有一个像这样的构造函数的控制器:

Public Sub New(Service As ICategoryService)

服务的构造函数如下所示:

Public Sub New(Repository As IRepository(Of Category), IValidationDictionary)

我有一个名为ModelStateWrapper的类,它实现了IValidationDictionary:

Public Class ModelStateWrapper
    Implements IValidationDictionary

    Private ModelState As ModelStateDictionary

    Public Sub New(ModelState As ModelStateDictionary)
        Me.ModelState = ModelState

    End Sub

    Public Sub AddError(Key As String, Message As String) Implements Core.Interfaces.IValidationDictionary.AddError
        ModelState.AddModelError(Key, Message)

    End Sub

    Public ReadOnly Property IsValid As Boolean Implements Core.Interfaces.IValidationDictionary.IsValid
        Get
            Return ModelState.IsValid
        End Get
    End Property

End Class

我想将控制器的ModelState注入ModelStateWrapper,并将其注入服务中。这可能吗?

我已经查看了Ninject中的自定义提供程序,并让控制器继承了BaseController类,但它似乎不起作用。有什么想法吗?

此外,在服务层中进行验证的标准方法是什么,可以从控制器中使用?

1 个答案:

答案 0 :(得分:2)

看起来你在尝试注入ModelState时会遇到问题,因为曾经在一个动作方法中你已经有了你希望传递给你的包装器的ModelState的实例

并非每个对象都需要或应该注入。有时,这种情况可能是其中之一,“注入”或将依赖项或对象作为参数提供给需要它的方法更简洁,更简单。也就是说,将IValidationDictionary作为参数传递给服务中的方法。在控制器中构造一个ModelStateWrapper(新建它或使用Factory),并将其传入。