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); } }
/// <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> public BusinessRESTfulContext(IBusinessPool pool) : this(pool, new NativeBusinessRegister()) { }