public void Register(IBusinessPool businessPool)
        {
            pool = businessPool;
            //读取配置文件
            try
            {
                BusinessKindModel   kindModel   = null;
                BusinessMethodModel methodModel = null;

                var container = new WindsorContainer();
                if (ConfigurationManager.GetSection("mysoft.framework/restful") != null)
                {
                    container = new WindsorContainer(new XmlInterpreter(new ConfigResource("mysoft.framework/restful")));
                }

                //给当前容器赋值
                this.container = new ServiceContainer(container);

                foreach (var type in GetInterfaceServices <PublishKindAttribute>(container))
                {
                    //获取类特性
                    var kind = CoreHelper.GetTypeAttribute <PublishKindAttribute>(type);
                    if (kind == null)
                    {
                        continue;
                    }

                    kind.Name = kind.Name.ToLower();

                    //如果包含了相同的类别,则继续
                    if (pool.KindMethods.ContainsKey(kind.Name))
                    {
                        kindModel = pool.KindMethods[kind.Name];
                    }
                    else
                    {
                        kindModel = new BusinessKindModel
                        {
                            Name        = kind.Name,
                            Description = kind.Description
                        };

                        pool.AddKindModel(kind.Name, kindModel);
                    }

                    //获取方法特性
                    foreach (MethodInfo info in CoreHelper.GetMethodsFromType(type))
                    {
                        var method = CoreHelper.GetMemberAttribute <PublishMethodAttribute>(info);
                        if (method != null)
                        {
                            method.Name = method.Name.ToLower();

                            //如果包含了相同的方法,则继续
                            if (kindModel.MethodModels.ContainsKey(method.Name))
                            {
                                //处理重复的方法
                                for (int i = 0; i < 10000; i++)
                                {
                                    var name = method.Name + (i + 1);
                                    if (!kindModel.MethodModels.ContainsKey(name))
                                    {
                                        method.Name = name;
                                        break;
                                    }
                                }
                            }

                            methodModel = new BusinessMethodModel
                            {
                                Name            = method.Name,
                                Description     = method.Description,
                                HttpMethod      = HttpMethod.GET,
                                Authorized      = method.Authorized,
                                Method          = info,
                                Parameters      = info.GetParameters(),
                                ParametersCount = info.GetParameters().Count(),
                                Service         = type
                            };

                            var types = info.GetParameters().Select(p => p.ParameterType).ToArray();
                            if (!CoreHelper.CheckPrimitiveType(types))
                            {
                                methodModel.HttpMethod = HttpMethod.POST;
                            }

                            kindModel.MethodModels.Add(method.Name, methodModel);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                SimpleLog.Instance.WriteLogForDir("RESTful", ex);
            }
        }
예제 #2
0
 /// <summary>
 /// 实例化BusinessRESTfulContext
 /// </summary>
 /// <param name="pool"></param>
 /// <param name="register"></param>
 public BusinessRESTfulContext(IBusinessPool pool, IBusinessRegister register)
 {
     this.pool     = pool;
     this.register = register;
     Init();
 }
 /// <summary>
 /// 实例化BusinessRESTfulContext
 /// </summary>
 /// <param name="pool"></param>
 /// <param name="register"></param>
 public BusinessRESTfulContext(IBusinessPool pool, IBusinessRegister register)
 {
     this.pool = pool;
     this.register = register;
     Init();
 }
예제 #4
0
 /// <summary>
 /// 实例化BusinessRESTfulContext
 /// </summary>
 /// <param name="pool"></param>
 public BusinessRESTfulContext(IBusinessPool pool)
     : this(pool, new NativeBusinessRegister())
 {
 }
 /// <summary>
 /// 实例化BusinessRESTfulContext
 /// </summary>
 /// <param name="pool"></param>
 public BusinessRESTfulContext(IBusinessPool pool)
     : this(pool, new NativeBusinessRegister()) { }