如何链接依赖项解析?

时间:2013-06-26 01:21:55

标签: vb.net dependency-injection ninject

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

1 个答案:

答案 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)())