Я пытаюсь понять, как работают Lifetime Managers.Я зарегистрировал 2 типа и впрыснул один в другой (Audi в Driver).Я создал два экземпляра Driver и, похоже, они используют один и тот же экземпляр Audi, когда я ожидал, что у каждого Driver будет свой экземпляр Audi (поскольку используется TransientLifetimeManager).
public interface ICar
{
int Run();
}
public class Audi : ICar
{
private int _miles = 0;
public int Run()
{
return ++_miles;
}
}
public class Driver
{
public ICar _car = null;
public Driver(ICar car)
{
_car = car;
}
public void RunCar()
{
Console.WriteLine("Running {0} - {1} mile ", _car.GetType().Name, _car.Run());
}
}
container.RegisterType<ICar, BMW>();
container.RegisterType<Driver>(new InjectionConstructor(container.Resolve<ICar>()));
var driver = container.Resolve<Driver>();
var driver2 = container.Resolve<Driver>();
//False, that's fine.
Console.WriteLine(ReferenceEquals(driver,driver2));
//True. Why??
Console.WriteLine(ReferenceEquals(driver._car,driver2._car));
//The situation changes if I don't use InjectionConstructor parameter:
container.RegisterType<Driver>();
//Now it returns False.
Console.WriteLine(ReferenceEquals(driver._car,driver2._car));
В чем разница?Почему использование InjectionConstructor меняет поведение?