2011-07-09 24 views
1

我有這樣的代碼:Ninject GETALL返回重複對象

abstract class GenericAbstractClass<T> where T : struct { } 

class ImplementationClass : GenericAbstractClass<int> { } 

class Program { 
    static void Main (string[] args) 
    { 
     IKernel kernel = new StandardKernel(); 
      kernel.Bind(typeof(GenericAbstractClass<>)).To(typeof(ImplementationClass)); 

      var classes = kernel.GetAll(typeof(GenericAbstractClass<>)); 
      Console.WriteLine(classes.Count()); // Print 2. 

      foreach (var cls in classes) { 
       if (cls is ImplementationClass) 
        Console.WriteLine("cls is ImplementationClass"); 
      } 


      Console.ReadLine(); 
     } 
    } 

輸出是:

2 
cls is ImplementationClass 
cls is ImplementationClass 

我希望classes.Count()結果爲1

爲什麼GetAll返回重複的對象儘管我只綁定GenericClassImplementationClass

我該怎麼做才能讓GetAll返回所有非重複對象?

P.S.我用ninject 2.2

+0

您具有約束力沒有顯示類型的名稱,即,而不是CLS,顯示cls.GetType() –

回答

3

你的綁定沒有任何意義。你將一個開放的泛型綁定到一個封閉泛型。 Ninject對綁定的合理性檢查似乎存在差距。

更改到

kernel.Bind(typeof(GenericAbstractClass<int>)).To(typeof(ImplementationClass)); 
kernel.GetAll(typeof(GenericAbstractClass<int>)); 
+0

我想在我的問題使用這些代碼來實現的東西。我似乎誤解了一些C#概念。感謝您的澄清。我會接受這個答案。 –