簡體   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