Это мой сценарий:Resolve только один элемент в списке <Lazy<T>> с Ninject
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', почему вы не просто впрыснуть, что однократное Экземпляр «Собака» в конструкторе Foo? – Steven
@Steven см. Мое обновление. –
Итак, почему бы не ввести собаку и кошку? Если у вас есть еще больше этих методов, вы можете нарушить [Принцип единой ответственности] (http://en.wikipedia.org/wiki/Single_responsibility_principle). – Steven