某种原因,来自不同房间的治愈者正在被同一RoomHealing实例注册。这导致战友倒下时,没有正确分配治愈者。我的脑海中浮现了解决VContainer问题的方法,但我却被沮丧所困扰。 这个问题是如何产生的?我在调试过程中,通过状态,发现两个治愈者都注册在同一个对象上,而不是其他实例中。

以下是我的结构:

RoomUnits 和 RoomHealing 是 POCO,构造在 RoomContextScope 中:

protected override void Configure(IContainerBuilder builder)
{
  builder.Register(resolver =>
  {
    var units = new RoomUnits();
    ToPrivateScope(resolver).Inject(units);
    return units;
  }, Lifetime.Singleton);

  builder.Register(resolver =>
  {
    var healing = new RoomHealing();
    ToPrivateScope(resolver).Inject(healing);
    return healing;
  }, Lifetime.Singleton);

  builder.RegisterBuildCallback(resolver =>
  {
    resolver.Resolve<RoomUnits>().Init();
    resolver.Resolve<RoomHealing>().Init();
  });
}

private IObjectResolver ToPrivateScope(IObjectResolver resolver) => resolver.CreateScope(builder =>
{
  builder.RegisterInstance(gameObject);
  builder.RegisterInstance(this).As<MonoBehaviour>();
});