From dd5143fc7fa4123fe8d578d089d1d99b555d2440 Mon Sep 17 00:00:00 2001 From: mewlist Date: Wed, 21 Feb 2024 09:54:50 +0900 Subject: [PATCH] Handle injiection point exception --- Runtime/DIContainer.cs | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Runtime/DIContainer.cs b/Runtime/DIContainer.cs index b701e58..17c1158 100644 --- a/Runtime/DIContainer.cs +++ b/Runtime/DIContainer.cs @@ -186,9 +186,22 @@ private async ValueTask InstantiateInternalAsync(Type targetType, object AfterInjectionProcessingScope.Begin(); var target = await ConstructorInjector.DoInject(targetType, args, scopedInstances); - var targetMethodsInfo = GetTargetMethodInfo(targetType); - var targetPropertiesInfo = GetTargetPropertyInfo(targetType); - var targetFieldsInfo = GetTargetFieldInfo(targetType); + + TargetMethodsInfo targetMethodsInfo; + TargetPropertiesInfo targetPropertiesInfo; + TargetFieldsInfo targetFieldsInfo; + try + { + targetMethodsInfo = GetTargetMethodInfo(targetType); + targetPropertiesInfo = GetTargetPropertyInfo(targetType); + targetFieldsInfo = GetTargetFieldInfo(targetType); + } + catch (Exception e) + { + InjectionProcessingScope.End(); + AfterInjectionProcessingScope.End(); + throw new FailedToInjectException(target, e); + } try { @@ -275,9 +288,21 @@ private async ValueTask InjectIntoInternalAsync(T target, object[] args, Scop AfterInjectionProcessingScope.Begin(); var targetType = target.GetType(); - var targetMethodsInfo = GetTargetMethodInfo(targetType); - var targetPropertiesInfo = GetTargetPropertyInfo(targetType); - var targetFieldsInfo = GetTargetFieldInfo(targetType); + TargetMethodsInfo targetMethodsInfo; + TargetPropertiesInfo targetPropertiesInfo; + TargetFieldsInfo targetFieldsInfo; + try + { + targetMethodsInfo = GetTargetMethodInfo(targetType); + targetPropertiesInfo = GetTargetPropertyInfo(targetType); + targetFieldsInfo = GetTargetFieldInfo(targetType); + } + catch (Exception e) + { + InjectionProcessingScope.End(); + AfterInjectionProcessingScope.End(); + throw new FailedToInjectException(target, e); + } try {