0

只是重申一下标题,这是 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 页面的顶部,其中我有以下“新”构造函数的代码:

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

(好吧,我说“我相信”,但我知道好像我将“ilbdUOW”从接口更改为“lbdUOW”类,它相应地更改了错误消息,所以这绝对是它的来源)

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

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

如果有人能指出我正确的方向,我将不胜感激,谢谢。

编辑添加:@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)()
4

1 回答 1

2

WebForm 是由 ASP.NET 而不是 Ninject 创建的 您不能在 WebForms 上使用构造函数注入。您必须改为进行属性注入。

于 2013-01-15T07:46:18.500 回答