Ninject动态多个构造函数参数

时间:2013-01-04 20:28:23

标签: vb.net winforms ninject

我一直在现有的Winforms项目中实现依赖注入,到目前为止它一直很顺利,但是我想概括一下Forms的调用,特别是不同数量的构造函数参数。

我的代码如下:

Public Shared Function GetForm(formObject As BaseObject, _
    parameters As Dictionary(Of String, Object)) As Form

        Select Case formObject.GetType()
            Case GetType(Production.Task)
                Return SMKernel.Kernel.Get(Of Forms.Production.Domain.ManageTask) _
                    (New Parameters.ConstructorArgument() _
                    {New Parameters.ConstructorArgument("task", _
                        CType(formObject, Production.RequiredTask))})
        End Select

    End Function

这很好用,接口正确注入,构造函数参数“task”被填充,Form也按预期工作。

正如您所看到的,我有一个包含几个参数的词典,我需要将这些参数添加到ConstructorArgument方法的Get部分。看一下IntelliSense,我应该可以传入一组ConstructorArgument个对象,但无论我尝试过什么,它似乎都不适用于某种原因。

如果可能的话,你如何在Ninject中完成这个任务。如果这种方式不可行,如何通过Ninject将多个参数传递给Form的构造函数?

1 个答案:

答案 0 :(得分:2)

使用已提供的ResolutionExtensions

    public static T Get<T>(this IResolutionRoot root, params IParameter[] parameters)

然后将其与LINQ

结合使用
Kernel.Get(parameters.Select(kvp => new ConstructorArgument(kvp.Key, kvp.Value)).ToArray())

提供更多详细信息,我们可能会给您更优雅的方法。