Это мой сценарий:
public class Foo
{
private readonly List<Lazy<IAnimal>> _animals;
public Foo(List<Lazy<IAnimal>> animals )
{
_animals = animals;
}
public void Bark()
{
//Line: *
var dog = _animals.First(p => p.GetType() == typeof (Dog)).Value;
}
Public void Mio()
{
//Line: *
var dog = _animals.First(p => p.GetType() == typeof (Cat)).Value;
}
}
public class Dog:IAnimal
{
}
public class Cat:IAnimal
{
}
public interface IAnimal
{
}
Вопросы:
Здесь список животных лениво вводится в класс Foo.
Я хочу сделать что-то вроде Line * с Ninject
. Как вы знаете, проблема в том, что перед разрешением класса GetType()
возвращает Null
. Итак, как я могу разрешить только один из элементов в списке, когда захочу?
Может ли Ninject
сделать такое вообще, или мне придется изменить свой DI-контейнер?
Dog
в методеBark
, почему бы вам просто не внедрить этот единственный экземплярDog
в конструкторFoo
? - person Steven   schedule 25.07.2013MainWindow
, которые отвечают за звук животного (первая кнопка для собаки, вторая для кошки и так далее). Класс Foo на самом деле является моимMainWindowViewModel
, который я привязал к кнопкам.Command
к методам в нем. Сценарий на самом деле намного сложнее, чем этот пример кода. Как вы знаете, я использовал эти термины только для простоты. на самом деле у меня есть тяжелое дерево классов, и я думаю, что если я захочу разрешить их в корне моей композиции, это повлияет на производительность. - person Mehrdad Kamelzadeh   schedule 25.07.2013