Ninject GetAll возвращает дубликат объекта - PullRequest
1 голос
/ 09 июля 2011

У меня есть этот код:

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 возвращает дубликат объекта, несмотря на то, что я только привязываю GenericClass к ImplementationClass?

Что я должен сделать, чтобы GetAll возвратил все недвойственные объекты?

P.S. Я пользуюсь ninject 2.2

1 Ответ

3 голосов
/ 11 июля 2011

Ваша привязка не имеет никакого смысла.Вы связываете открытый универсальный тип с закрытым.Похоже, что в проверке правдоподобности Ninject есть пробел.

Измените привязку на

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