hadashiA / VContainer

The extra fast, minimum code size, GC-free DI (Dependency Injection) library running on Unity Game Engine.
https://vcontainer.hadashikick.jp
MIT License
1.92k stars 167 forks source link

If a subclass defines a private field with the same name as one in the baseclass, it will cause some private fields in the baseclass not to be injected. #669

Closed 1000111001 closed 3 months ago

1000111001 commented 4 months ago

Test code:

public class BaseClass
{
    [Inject] private readonly int _privateReadonlyFieldValue;
    [Inject] private int _privateFieldValue;
    [Inject] private int _privateFieldValue2;

    public void AreEqual(int actual)
    {
        Assert.AreEqual(_privateReadonlyFieldValue, actual);
        Assert.AreEqual(_privateFieldValue, actual);
        Assert.AreEqual(_privateFieldValue2, actual);
    }
}

public class SubClass : BaseClass
{
    [Inject] private int _privateFieldValue;
}

_privateFieldValue and _privateFieldValue2 in BaseClass will not be injected.

hadashiA commented 3 months ago

691, this case now throws an exception.

Declaring fields with exactly the same signature in SubClass is nonsense.