コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }