Zenject не может разрешить зависимости в SubContainer по нескольким причинам:
1. Неправильная конфигурация: Если не указаны или неправильно указаны биндинги для зависимостей в SubContainer, Zenject не сможет разрешить их.
2. Отсутствие биндингов: Если биндинги для зависимостей были установлены неправильно или не полностью, Zenject не сможет предоставить все необходимые зависимости.
3. Приоритеты биндингов: Если не указаны правильные приоритеты биндингов, Zenject может использовать неправильные зависимости при разрешении зависимостей в SubContainer.
Чтобы переписать код конструкторов классов Test1 и Test2 и сделать их работающими в случае с такой конфигурацией, вы можете внести следующие изменения:
1. Измените конструктор класса Test1 так, чтобы он принимал абстракции в качестве параметров зависимостей:
```csharp
public class Test1
{
private readonly IDependencyA _dependencyA;
private readonly IDependencyB _dependencyB;
public Test1(IDependencyA dependencyA, IDependencyB dependencyB)
{
_dependencyA = dependencyA;
_dependencyB = dependencyB;
}
// Добавьте остальной код класса
}
```
2. Измените конструктор класса Test2 так, чтобы он принимал абстракции в качестве параметров зависимостей:
```csharp
public class Test2
{
private readonly IDependencyC _dependencyC;
private readonly IDependencyD _dependencyD;
public Test2(IDependencyC dependencyC, IDependencyD dependencyD)
{
_dependencyC = dependencyC;
_dependencyD = dependencyD;
}
// Добавьте остальной код класса
}
```
3. В методе InstallBindings класса SimpleInstaller установите все необходимые биндинги для зависимостей в SubContainer:
```csharp
public class SimpleInstaller : MonoInstaller
{
public override void InstallBindings()
{
// Установка биндингов для зависимостей в текущем контейнере
// Установка биндингов для зависимостей в SubContainer
SubContainerInstaller.Install<SubContainerInstaller>(Container);
}
}
```
4. В методе InstallBindings класса SubContainerInstaller установите биндинги для зависимостей в SubContainer:
```csharp
public class SubContainerInstaller : MonoInstaller
{
public override void InstallBindings()
{
// Установка биндингов для зависимостей в текущем контейнере
// Установка биндингов для зависимостей в SubContainer
Container.Bind<IDependencyA>().To<DependencyA>().AsSingle();
Container.Bind<IDependencyB>().To<DependencyB>().AsSingle();
Container.Bind<IDependencyC>().To<DependencyC>().AsSingle();
Container.Bind<IDependencyD>().To<DependencyD>().AsSingle();
}
}
```
После внесения этих изменений Zenject должен корректно разрешить зависимости в SubContainer и создать экземпляры классов Test1 и Test2 с правильными зависимостями.