只是重新標題,這是web表單而不是mvc。它也使用vb.net。在Web表單中使用Ninject使用Ninject的「參數未指定參數」
我已經使用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
(當然,我說的「我相信」,但我知道這是因爲如果我從interfa中更改「ilbdUOW」 CE到類的「lbdUOW」這相應地更改錯誤信息,這樣肯定是在那裏的來自)
如果我戴上了「UOW = _uow」線調試停在我的「新」的構造,也另調試停止在NinjectWebCommon文件中的「RegisterServices」方法中,調試器僅在「RegisterServices」調試點停止,並且永遠不會進入主.aspx頁面中的調試停止。
我現在完全失去了。我試圖讓我的腦袋圍繞對我而言相對較新的事物,我認爲我幾乎到了那裏。我的理解是,NinjectWebCommon中的「RegisterServices」中的代碼將認識到,當我在構造函數中引用它時(例如我的.aspx頁面中的「新」構造函數),我需要一個「ilbdUOW」接口實例,並且將自動注入它,從而使工作實例的單元可用於訪問數據庫。
如果任何人都可以指出我在正確的方向,我會非常感激,謝謝。
編輯補充: @ 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)()
'lbdUOW'是否有無參數的構造函數? – mipe34
作爲註釋編輯的主要問題不允許格式化。 – TheMook
泛型異常表示您沒有爲構造函數提供必需的參數。在我看來,Ninject迄今並沒有參與其中。嘗試檢查這些示例http://stackoverflow.com/questions/4933695/how-can-i-implement-ninject-or-di-on-asp-net-web-forms如果你已經完成了所有需要的步驟。 – mipe34