我目前正在开展一个项目,我们正在将旧的 DataSet、存储过程 WinForm 应用程序转换为使用实体框架,以便新网站可以访问相同的对象模型和存储库。
无论如何,我正在尝试在表单中实现依赖注入,以便我们可以使用模拟存储库进行单元测试。我使用 Ninject 的原因很简单,因为我之前在 MVC 网站中使用过它,但是至少可以说,尝试在 WinForm 应用程序中实现这一点被证明是有问题的,由于 WinForms 中缺乏关于 DI 的信息而更加受阻网络。
到目前为止,我已经创建了 Ninject Factory 和存储库,但我没有太多运气将存储库注入表单。
因此,任何人都可以帮助我或提出任何建议吗?
下面我的部分代码可能会有所帮助:
忍者工厂:
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()
我知道我的问题有点含糊,但我不确定问题出在哪里或我需要完成什么。
非常感谢