Skip to content

Commit dac2fea

Browse files
authored
Fix OnInstantiated callback not being called after injection in InstanceProvider (#98)
1 parent 1a907d1 commit dac2fea

File tree

4 files changed

+15
-5
lines changed

4 files changed

+15
-5
lines changed

UnityProject/Assets/Plugins/Zenject/Source/Binding/Binders/Factory/FactoryFromBinderBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public ConditionCopyNonLazyBinder FromInstance(object instance)
7979
BindingUtil.AssertInstanceDerivesFromOrEqual(instance, AllParentTypes);
8080

8181
ProviderFunc =
82-
(container) => new InstanceProvider(ContractType, instance, container);
82+
(container) => new InstanceProvider(ContractType, instance, container, null);
8383

8484
return this;
8585
}

UnityProject/Assets/Plugins/Zenject/Source/Binding/Binders/FromBinders/FromBinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ protected ScopeConcreteIdArgConditionCopyNonLazyBinder FromInstanceBase(object i
872872
BindInfo.MarkAsCreationBinding = false;
873873
SubFinalizer = new ScopableBindingFinalizer(
874874
BindInfo,
875-
(container, type) => new InstanceProvider(type, instance, container));
875+
(container, type) => new InstanceProvider(type, instance, container, BindInfo.InstantiatedCallback));
876876

877877
return new ScopeConcreteIdArgConditionCopyNonLazyBinder(BindInfo);
878878
}

UnityProject/Assets/Plugins/Zenject/Source/Main/DiContainer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2871,7 +2871,7 @@ public IdScopeConcreteIdArgConditionCopyNonLazyBinder BindInstance<TContract>(TC
28712871
statement.SetFinalizer(
28722872
new ScopableBindingFinalizer(
28732873
bindInfo,
2874-
(container, type) => new InstanceProvider(type, instance, container)));
2874+
(container, type) => new InstanceProvider(type, instance, container, bindInfo.InstantiatedCallback)));
28752875

28762876
return new IdScopeConcreteIdArgConditionCopyNonLazyBinder(bindInfo);
28772877
}

UnityProject/Assets/Plugins/Zenject/Source/Providers/InstanceProvider.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@ public class InstanceProvider : IProvider
1010
readonly object _instance;
1111
readonly Type _instanceType;
1212
readonly DiContainer _container;
13+
readonly Action<InjectContext, object> _instantiateCallback;
1314

1415
public InstanceProvider(
15-
Type instanceType, object instance, DiContainer container)
16+
Type instanceType, object instance, DiContainer container, Action<InjectContext, object> instantiateCallback)
1617
{
1718
_instanceType = instanceType;
1819
_instance = instance;
1920
_container = container;
21+
_instantiateCallback = instantiateCallback;
2022
}
2123

2224
public bool IsCached
@@ -42,7 +44,15 @@ public void GetAllInstancesWithInjectSplit(
4244

4345
Assert.That(_instanceType.DerivesFromOrEqual(context.MemberType));
4446

45-
injectAction = () => _container.LazyInject(_instance);
47+
injectAction = () =>
48+
{
49+
object instance = _container.LazyInject(_instance);
50+
51+
if (_instantiateCallback != null)
52+
{
53+
_instantiateCallback(context, instance);
54+
}
55+
};
4656

4757
buffer.Add(_instance);
4858
}

0 commit comments

Comments
 (0)