2015-06-22 24 views
2
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不接受這種類型的綁定的任何幫助? 我這樣做,以便可以在不同的依賴注入框架中使用相同的服務集合。

+0

當你說「不接受」,你會得到一個異常?還是沒有約束力? –

+0

它不會將iRepo和repo識別爲可以添加到內核的類型。 – JNN

回答

2

這句法可能不會編譯:

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); 
} 
+0

它已經工作。謝謝。 – JNN

+2

如果這解決了您的問題,請將其標記爲答案=) – FMM