public T Resolve(InstanceGenerator instanceGenerator, GenerationTrace trace) { try { _nestingLimit.AddNestingFor <T>(trace); if (!_nestingLimit.IsReachedFor <T>()) { return(_fakeChain.Resolve(instanceGenerator, trace)); } else { try { trace.NestingLimitReachedTryingDummy(); return(instanceGenerator.Dummy <T>(trace)); //TODO } catch (TargetInvocationException e) { return(default(T)); } catch (MemberAccessException e) { return(default(T)); } catch (ArgumentException e) { return(default(T)); } } } finally { _nestingLimit.RemoveNestingFor <T>(trace); } }
public T Resolve(InstanceGenerator instanceGenerator) { try { _perTypeNestingLimit.AddNestingFor <T>(); if (!_perTypeNestingLimit.IsReachedFor <T>()) { return(_fakeChain.Resolve(instanceGenerator)); } else { try { return(instanceGenerator.Dummy <T>()); } catch (TargetInvocationException e) { return(default(T)); } catch (MemberAccessException e) { return(default(T)); } catch (ArgumentException e) { return(default(T)); } } } finally { _perTypeNestingLimit.RemoveNestingFor <T>(); } }
public T WithNextNestingLevel <T>(Func <T> limitNotReachedFunction, Func <T> limitReachedFunction) { try { NestingLimit.AddNestingFor <T>(Trace); if (!NestingLimit.IsReachedFor <T>()) { return(limitNotReachedFunction.Invoke()); } else { return(limitReachedFunction.Invoke()); } } finally { NestingLimit.RemoveNestingFor <T>(Trace); } }