1

如您所见,我已经绑定了我的 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)
4

1 回答 1

1

回答标题:如果匹配绑定可用,则依赖解析由 Ninject 自动链接。

如果依赖项MovieRepository是任何IDbClassesDataContext您不必WithConstructorArgument明确指定。IDbClassesDataContext如果已经绑定,Ninject 能够自动解决依赖关系。

只需删除绑定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)())
于 2013-06-26T19:58:40.620 回答