public object Build(IBuilderContext context, GetNextBuilderDelegate next) { object target; var constructorBuilder = this.constructorBuilder; var buildMembers = this.builderMembers; target = constructorBuilder.Invoke(context, null, null); if (buildMembers != null && buildMembers.Length > 0) { for (int i = 0, len = buildMembers.Length; i < len; i++) { var buildMember = buildMembers[i]; buildMember.Invoke(context, target, null); } } if (target is IAfterBuilder) { ((IAfterBuilder)target).AfterBuilder(); } return(target); }
public object Build(IBuilderContext context, GetNextBuilderDelegate next) { object target = next()(context, next); var proxyServer = context.CreateInstance(proxyServerType, null, new IBuilderValue[] { new TypedValue(typeof(object), null, target) }) as ProxyServer; if (isTransparentProxy) { lock (TransparentProxyAttribute.lockProxyServerField) { TransparentProxyAttribute.proxyServer = proxyServer; try { //error //return injector.CreateInstance(proxyType, null, // new IInjectValue[] { //new InjectValue(typeof(InjectProxy), null, proxy) // }); target = Activator.CreateInstance(proxyType); } finally { TransparentProxyAttribute.proxyServer = null; } } } else { List <IBuilderValue> values = new List <IBuilderValue>(context.Values); values.Add(new TypedValue(typeof(ProxyServer), null, proxyServer)); values.Add(new TypedValue(proxyServerType, null, proxyServer)); values.Add(new TypedValue(context.TargetType, null, target)); target = context.CreateInstance(proxyType, null, values.ToArray()); } return(target); }