Хорошо, я понятия не имею, почему это происходит.
Я установил свойство, и сразу после того, как я установил его, оно равно нулю в другом классе. Если он идет с отладчиком, он просто показывает, что он установлен, и что его значение равно нулю в другом классе.
Это мой код: (убрал весь ненужный код)
public class SnakeGame : SenseHatSnake, ISnakeGame
{
private readonly IBody _body;
public SnakeGame(ISenseHat senseHat, IBody body)
: base(senseHat)
{
_body = body;
}
private void UpdateGame(Object state)
{
_movement.PreviousPositions.Add(new Position()
{
X = _movement.X,
Y = _movement.Y
});
if (_body.DetectCollision(_movement.X, _movement.Y))
{
GameOver();
}
}
}
Это происходит в DetectCollision
в классе тела.
public class Body : IBody
{
private readonly IMovement _movement;
public Body(IMovement movement)
{
_movement = movement;
}
public bool DetectCollision(int x, int y)
{
for (int i = 1; i < Length + 1; i++)
{
if (_movement.PreviousPositions.Count > i)
{
int bX = _movement.PreviousPositions[_movement.PreviousPositions.Count - i - 1].X;
int bY = _movement.PreviousPositions[_movement.PreviousPositions.Count - i - 1].Y;
if (bX == x && bY == y)
{
return true;
}
}
}
return false;
}
}
Я только что установил _movement.PreviousPositions
, и я вижу его в отладчике, но как только он появится в Body
_movement.PreviousPositions
, он будет нулевым.
Movement.cs:
public class Movement : IMovement
{
public List<Position> PreviousPositions { get; set; }
}
Примечание:
Я использую DI, я что-то там не так делаю? (Autofac)
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
var builder = new ContainerBuilder();
builder.RegisterType<Body>().As<IBody>();
builder.RegisterType<Display>().As<IDisplay>();
builder.RegisterType<Draw>().As<IDraw>();
builder.RegisterType<Food>().As<IFood>();
builder.RegisterType<Movement>().As<IMovement>();
builder.RegisterType<SnakeGame>().As<ISnakeGame>();
builder.RegisterType<ISenseHat>().As<ISenseHat>();
var container = builder.Build();
var body = container.Resolve<IBody>();
var display = container.Resolve<IDisplay>();
var draw = container.Resolve<IDraw>();
var food = container.Resolve<IFood>();
var movement = container.Resolve<IMovement>();
Task.Run(async () =>
{
ISenseHat senseHat = await SenseHatFactory.GetSenseHat().ConfigureAwait(false);
var snakeGame = new SnakeGame(senseHat, body, display, draw, food, movement);
snakeGame.Run();
});
}
}