示例#1
0
        private IEntityProxy CreateProxy()
        {
            Type entityType = this.GetType();
            Type proxyType  = EntityProxyFactory.GetProxy(entityType);

            if (proxyType == null)
            {
                throw new NotImplementedException(
                          string.Format("实体类型 {0} 并没有注册匹配的代理类型。", entityType.FullName)
                          );
            }
            else
            {
                return(proxyType.FastNew() as IEntityProxy);
            }
        }
示例#2
0
        public static Entity LoadFromHttp(HttpContext context, ParameterInfo p)
        {
            // 这个方法原本就是给 ClownFish.Web 调用的,
            // 所以这里直接反射 ClownFish.Web 来调用它的实体填充逻辑。

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (p == null)
            {
                throw new ArgumentNullException(nameof(p));
            }

            Init();

            Entity resultObject = null;
            Entity entityObject = p.ParameterType.FastNew() as Entity;

            Type proxyType = EntityProxyFactory.GetProxy(p.ParameterType);

            if (proxyType != null)
            {
                IEntityProxy proxy = proxyType.FastNew() as IEntityProxy;
                proxy.Init(entityObject);
                resultObject = proxy as Entity;
            }
            else
            {
                resultObject = entityObject;
            }

            // 为了不直接依赖于 ClownFish.Web 项目,这里就采用反射方式处理
            object builder = ObjectFactory.New(s_builderType);

            s_method.FastInvoke(builder, context, resultObject, p);

            return(resultObject);
        }