繁体   English   中英

使用反射的 Ninject 依赖注入

[英]Ninject Dependency Injection Using Reflection

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 不接受这种类型的绑定有什么帮助吗? 我这样做是为了让人们可以在不同的依赖注入框架中使用相同的一组服务。

此语法可能无法编译:

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

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

尖括号内的位称为类型参数(例如<iRepo><repo> ),它们应该是实际的类型名称,而不是System.Type类型的变量。 不过,碰巧的是,Ninject 有另一种绑定形式,它可能对您非常有用:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM