Как настроить Zenject, чтобы при запросе интерфейса он настраивал новый игровой объект и возвращал вновь связанный экземпляр класса - PullRequest
0 голосов
/ 20 ноября 2018

Zenject - это здорово, но я не нашел правильного решения для создания экземпляра игрового объекта.

У меня есть скрипт, который предоставляет различные перехватчики событий для монобихвичных событий.Start, PostStart, Update, FixedUpdate и другие, поэтому контроллеры, не относящиеся к Unity, могут выполняться при определенных событиях.Он основан на интерфейсе, который я назвал "IEventsController"

Мои настройки раньше были бы примерно такими:

private static IEventsController _Events;
public static IEventsController GetEvents()
{
    if (_Events == null) 
    {
        var go = new GameObject("EventsController");
        _Events = go.AddComponent<EventsController>();
    }

    return _Events;
}

Я пытаюсь выяснить, есть ли в Zenject встроенныйРешение для этого.Я мог бы использовать фабрику или метод, но фабрика имеет целый дополнительный класс для управления этим, когда Zenject может уже обработать это.Использование метода для генерации этого все еще требует статической ссылки, чтобы проверить, был ли он создан или нет, и это неправильно для этого, чтобы сидеть в сценарии установщика.Кроме того, существует ряд привязок FromComponent, в которых может быть что-то для этого, но я пока ничего не видел.

Пример вызова метода привязки, который я мог бы ожидать:

Container.BindComponent<IEventsController>()
   .To<EventsController>()
   .ViaNewGameObject("Events Controller");
  • Спасибо.

1 Ответ

0 голосов
/ 20 ноября 2018

Поскольку я не могу комментировать, чтобы попросить проработки, я сделаю все возможное, чтобы ответить полностью.

Если вы просто хотите построить объект, который не имеет зависимостей, т.е. (не требует внедрения насам) затем:

Container.Bind<IEventsController>().FromMethod(...)

Если вы хотите создать объект, который имеет зависимости и требует внедрения, то создайте класс Factory:

Container.Bind<IEventsController>().FromFactory<EventsControllerFactory>()

class EventsControllerFactory : IFactory<IEventsController> {
    [Inject]
    public IDep1 dep1;

    public IEventsController Create() {
        return new EventsController(dep1);
    }
}

Если вы хотите создать GameObject, которыйКроме того, у вас есть несколько методов, которые позволяют вам выбрать, ознакомьтесь с методами FromComponentXXX , которые позволяют использовать префаб-ссылку или префаб, сохраненный в папке ресурсов, и несколькими другими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...