只是重申一下标题,这是 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)()