只是为了重新标题,这是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)()
答案 0 :(得分:2)
WebForm是由ASP.NET而不是Ninject创建的。您不能在WebForms上使用构造函数注入。你必须做房产注入。