如您所见,我绑定了我的IDbClassesDataContext。我想要做的是链接下一个,这样当解析IMovieRepository时,它将传递重新发送的IDbClassesDataContext。
kernel.Bind(Of IDbClassesDataContext).To(Of DbClassesDataContext) _
.WithConstructorArgument("connection", connectionString)
kernel.Bind(Of IMovieRepository).To(Of MovieRepository)() _
.WithConstructorArgument("dataContext", IDbClassesDataContext)
我也试过这个:
kernel.Bind(Of IDbClassesDataContext).To(Of DbClassesDataContext) _
.WithConstructorArgument("connection", connectionString)
kernel.Bind(Of IMovieRepository).To(Of MovieRepository)() _
.WithConstructorArgument("dataContext", _
Function(context) context.Kernel.Get(Of DbClassesDataContext)())
我做错了什么?
对于记录,如果我传入一个初始化的DbClassesDataContext,它可以正常工作。
kernel.Bind(Of IMovieRepository).To(Of MovieRepository)() _
.WithConstructorArgument("dataContext", initializedObj)
答案 0 :(得分:1)
要回答标题:如果匹配的绑定可用,则Ninject会自动链接依赖关系解析。
如果MovieRepository
的依赖关系是IDbClassesDataContext
,则您不必明确指定WithConstructorArgument
。如果已绑定,Ninject能够自动解决对IDbClassesDataContext
的依赖关系。
只需删除WithConstructorArgument
绑定上的IMovieRepository
方法,然后检查MovieRepository
是否仅取决于IDbClassesDataContext
。
到您的代码:
在第一种情况下,我不明白这一行:
.WithConstructorArgument("dataContext", IDbClassesDataContext)
- 这是可编辑的吗?
在第二种情况下,您尝试从内核获取DbClassesDataContext
的实例,但绑定代码用于其接口 - IDbClassesDataContext
。为了使它工作,它应该是:
kernel.Bind(Of IMovieRepository).To(Of MovieRepository)() _
.WithConstructorArgument("dataContext", _
Function(context) context.Kernel.Get(Of IDbClassesDataContext)())