我目前正在開發一個項目,在該項目中,我們正在將舊數據集,存儲過程WinForm應用程序轉換爲使用實體框架,以便新網站可以訪問相同的對象模型和存儲庫。使用Ninject和實體框架在WinForms中進行依賴注入
無論如何,我正試圖在表單中實現依賴注入,以便我們可以使用模擬存儲庫進行單元測試。我使用Ninject是因爲我之前在MVC網站中使用過這個簡單的理由,但是試圖在WinForm應用程序中實現這一點的證明是有問題的,至少可以說是因爲在WinForms中缺乏關於DI的信息而受到更多的阻礙網絡。
到目前爲止,我已經創建了Ninject工廠和存儲庫,但是我沒有太多的運氣將存儲庫注入到表單中。
因此,任何人都可以幫助我或提出任何建議嗎?
下面我有我的部分代碼,這可能有助於:
Ninject廠:
public class NinjectFactory : NinjectModule
{
private IKernel _ninjectKernel;
public NinjectFactory()
{
_ninjectKernel = new StandardKernel();
}
public override void Load()
{
_ninjectKernel.Bind(typeof(IRepository<>)).To(typeof(GenericRepository<>));
_ninjectKernel.Bind(typeof(IProductionRepository)).To(typeof(ProductionRepository));
}
}
形式庫:
Public Class TaskForm
Inherits BaseBusinessDialogForm
Private _repository As TaskRepository
Private _task As Production.Task = Nothing
Public Sub New(ByVal task As Production.Task)
InitializeComponent()
_repository = New TaskRepository(ConnectString)
If task.TaskID = 0 Then
_task = task
Else
_task = _repository.GetByID(task.TaskID)
End If
MyBase.BusinessObject = _task
Me.TaskBindingSource.DataSource = MyBase.BusinessObject
End Sub
類,啓動其持有上述MDI窗體形式:
Dim kernel As IKernel = New StandardKernel(New NinjectFactory())
''Dim kernel As IKernel = New StandardKernel(New NinjectFactoryTest())
mfrmMDI = kernel.Get(Of Forms.MDI)()
Application.DoEvents()
mfrmMDI.ShowDialog()
我明白我的問題有點含糊,但我不確定問題出在哪裏或我需要完成什麼。
非常感謝
你有VB和C#的混合,將純粹在C#上有答案可以嗎? –
對不同語言的混淆,直接來自項目代碼。舊的東西是在VB中,而在C#中是新的東西,惱人的是至少可以說! – XN16