2016-09-15 3 views
1

Как добавить компонент в игровой объект? Нормальный путьZenject динамически добавлять компонент

GameObject obj = _factory.Create(); // Creates from prefab 

HasScore score = obj.AddComponent<HasScore>(); // attach the component 

Проблема в том, что HasScore компонент не проходит через IoC, следовательно, зависимости не вводили. Мой вопрос: как добавить компонент? Или как мне пройти через IoC? Я не мог найти это в документации, если кто-то делает это будет гораздо appriciated

[Inject] 
public void Initialize(SomeSignal.Trigger trigger) 
{ 
    _trigger = trigger; 
    Debug.Log("[+] Injecting in HasScore..."); 
} 
+0

Действительно хороший вопрос - к сожалению, у меня нет ответа. –

ответ

0

Bunny83 в Unity Answers ответил на этот вопрос. Ответ находится в интерфейсе IInstantiator в Zenject.

// Add new component to existing game object and fill in its dependencies 
// NOTE: Gameobject here is not a prefab prototype, it is an instance 
TContract InstantiateComponent<TContract>(GameObject gameObject) 
    where TContract : Component; 

TContract InstantiateComponent<TContract>(
    GameObject gameObject, IEnumerable<object> extraArgs) 
    where TContract : Component; 

Component InstantiateComponent(
    Type componentType, GameObject gameObject); 

Component InstantiateComponent(
    Type componentType, GameObject gameObject, IEnumerable<object> extraArgs); 

Component InstantiateComponentExplicit(
    Type componentType, GameObject gameObject, List<TypeValuePair> extraArgs); 

Так в соответствии с этим (код Zenject является очень хорошо объяснено в коде) Если я хочу присоединить свой HasScore компонент, это будет следующим образом (при условии, Container является экземпляром DiContainer впрыскивается в текущем контексте:

GameObject obj = _factory.Create(); // Creates from prefab 

// instantiate and attach the component in once function 
HasScore hasScore = Container.InstantiateComponent<HasScore>(obj); 
Смежные вопросы