У меня есть готовый сборник с монобезопасным поведением, который я хотел бы создать для экземпляра со всеми заполненными зависимостями монобихи поведения. Это монобиховое поведение, прикрепленное в префабе:
public class OnFreeRouteNodeClick : MonoBehaviour, IPointerClickHandler {
private DiContainer _container;
[Inject]
private TMFreeRouteData _nodeData;
}
Я хочу разрешить зависимость TMFreeRouteData при создании экземпляра префаба, поэтому моя попытка с фабрикой Zenject приведена ниже:
public class FreeRouteNodeFactory : Factory<Vector3, TMFRNodeData> {
DiContainer _container;
Vector3 _pos;
public FreeRouteNodeFactory (DiContainer container, Vector3 pos) {
_container = container;
_pos = pos;
}
//creates TMFRNodeData and instantiates node with dependencies filled
public void spawnNode(){
//Create TMFRNodeData logic
TMFRNodeData = new TMFRNodeData (_pos) {
//create instance of my data class
//this is a serializable class that holds the position and other info
}
//Here I need to bind the instace of the create TMFRNodeData to have it available in the node.
var prefab = _container.InstantiatePrefab(<ReferenceToPrefabWithOnFreeRouteNodeClickAttached>);
prefab.transform.position = _pos;
}
}
Мне нужен аргумент position (_pos) для создания класса TMFreeRouteData. Моя проблема в том, что я хотел бы создать экземпляр TMFreeRouteData, связать созданный экземпляр и передать его в закрытую переменную класса OnFreeRouteNodeClick с помощью инъекции. Я не знаю, является ли это хорошим подходом для включения этого в заводские логи c, но это просто установка сборных данных в экземпляре. Я знаю, что могу сначала создать экземпляр, а затем установить данные (в соответствии с принципами монобедийного поведения, не относящимися к конструкторам, и процессом создания объектов единства), но я хочу знать подход zenject к этой проблеме.
Надеюсь, я понял себя, большое спасибо заранее.