在Web表单中使用Ninject“未为参数指定参数”

时间:2013-01-14 17:29:07

标签: asp.net dependency-injection webforms ninject unit-of-work

只是为了重新标题,这是web表单而不是mvc。它也在使用vb.net。

我已经使用nuget将ninject.web添加到我的项目中。我已经按如下方式配置了NinjectWebCommon的“RegisterServices”方法:

Private Shared Sub RegisterServices(kernel As IKernel)
    kernel.Bind(Of ilbdUOW)().[To](Of lbdUOW)()
End Sub

一切都清洁干净。当我运行简单的Web表单(.aspx页面,没有母版页)时,我收到以下错误:

BC30455: Argument not specified for parameter '_uow' of 'Public Sub New(_uow As lbD.data.lbdUOW)'.

它指向编译代码中的第52行:

Line 51:         Public Sub New()
Line 52:             MyBase.New
Line 53:             Dim dependencies() As String

其中(我相信)在编译时来自.aspx页面的顶部,其中我有“new”构造函数的以下代码:

<Inject()> _
Public Sub New(_uow As ilbdUOW)
    Uow = _uow
End Sub

(好吧,我说“我相信”但是我知道就好像我将“ilbdUOW”从接口更改为“lbdUOW”类它会相应地更改错误消息,这样它肯定会来自哪里)< / p>

如果我在“New”构造函数中的“uow = _uow”行上调试停止,并且在NinjectWebCommon文件的“RegisterServices”方法中调试停止,则调试器仅停止在“RegisterServices”调试点上并且永远不会在主.aspx页面中点击调试停止。

我现在完全迷失了。我试图了解我对我来说相对较新的东西,我以为我已经到了那里。我的理解是NinjectWebCommon中的“RegisterServices”中的代码将识别出在构造函数中引用它时需要我的“ilbdUOW”接口的实例(例如我的.aspx页面中的“new”构造函数)并且自动注入它,从而使工作单元实例可供我使用。

访问数据库

如果有人能指出我正确的方向,我会非常感激,谢谢。

编辑添加: @ mipe34

不在“新”构造函数上,否:

Public Sub New(ByVal repositoryProvider As IRepositoryProvider)
    MyBase.New()
    CreateDbContext()
    repositoryProvider.DbContext = DbContext
    _RepositoryProvider = repositoryProvider
End Sub

我也设置了“RegisterServices”部分来映射这些接口,但是对于我得到的错误没有区别,无论这些额外的映射是否在那里,它似乎在我到达那一点之前失败了。

我已将这些行放入和放出“RegisterServices”部分,它没有任何区别:

    kernel.Bind(Of RepositoryFactories)().[To](Of RepositoryFactories)().InSingletonScope()
    kernel.Bind(Of IRepositoryProvider)().[To](Of RepositoryProvider)()

1 个答案:

答案 0 :(得分:2)

WebForm是由ASP.NET而不是Ninject创建的。您不能在WebForms上使用构造函数注入。你必须做房产注入。