使用反射的Ninject依赖注入

时间:2015-06-22 12:09:13

标签: c# dependency-injection ninject

public DefaultRepositoryRegistry(IKernel kernel)
{
    foreach (var tuple in DefaultContractList())
    {
        var iRepo = tuple.Item1;
        var repo = tuple.Item2;
    }
}

private static IEnumerable<Tuple<Type, Type>> DefaultContractList()
{
    var contractList = new List<Tuple<Type, Type>>()
    {
        #region Mongo

        Tuple.Create(typeof (IMongoRepository), typeof (MongoRepository)),

        #endregion Mongo
    };

    return contractList;
}

我无法进行动态绑定,例如

foreach (var tuple in DefaultContractList())
{
    var iRepo = tuple.Item1;
    var repo = tuple.Item2;

    kernel.Bind<iRepo>().To<repo>();
}

有关为何Ninject不接受此类绑定的任何帮助? 我这样做是为了让人们可以在不同的依赖注入框架中使用相同的服务集。

1 个答案:

答案 0 :(得分:2)

这种语法可能不会编译:

foreach (var tuple in DefaultContractList())
{
    var iRepo = tuple.Item1;
    var repo = tuple.Item2;

    kernel.Bind<iRepo>().To<repo>();
}

尖括号内的位称为类型参数(例如<iRepo><repo>),它们应该是实际的类型名称,而不是类型{{的变量1}}。尽管如此,Ninject还是有另一种形式的绑定,它可能对你很有效:

System.Type