Exemplo n.º 1
0
        public ServiceInfo GetService(string fullName)
        {
            var  serviceModel = GetServices().FirstOrDefault(x => x.ServiceFullName == fullName);
            Type serviceType  = serviceModel.ServiceType;

            try
            {
                serviceType = new HttpContextHelper().HttpContext.RequestServices.GetService(serviceType).GetType();
            }
            catch { }

            foreach (var prop in serviceType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
            {
                serviceModel.Properties.Add(new ServicePropertyInfo
                {
                    Id     = prop.Name,
                    Name   = prop.Name,
                    GetSet = "{"
                             + (prop.GetMethod != null ? (prop.GetMethod.IsPublic ? " get;" : "") + (prop.GetMethod.IsPrivate ? " private get;" : "") : "")
                             + (prop.SetMethod != null ? (prop.SetMethod.IsPublic ? " set;" : "") + (prop.SetMethod.IsPrivate ? " private set;" : "") : "")
                             + " }",
                    PropertyType = prop.PropertyType.GetFriendlyName(),
                    Poperty      = prop
                });
            }

            foreach (var field in serviceType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
            {
                serviceModel.Fields.Add(new ServiceFieldInfo
                {
                    Id        = field.Name,
                    Name      = field.Name,
                    Accessor  = (field.IsPublic ? "public" : "") + (field.IsPrivate ? "private" : ""),
                    FieldType = field.FieldType.GetFriendlyName(),
                    Field     = field
                });
            }

            foreach (var method in serviceType.GetMethods())
            {
                var    methodParameter  = method.GetParameters();
                string methodParameters = "(";
                for (int i = 0; i < methodParameter.Length; i++)
                {
                    if (i > 0)
                    {
                        methodParameters += ", ";
                    }
                    methodParameters += methodParameter[i].ParameterType.GetFriendlyName() + " " + methodParameter[i].Name;
                }
                methodParameters += ")";
                string name = method.ReturnType + " " + method.Name + " " + methodParameters;
                serviceModel.Methods.Add(new ServiceMethodInfo
                {
                    Id               = name,
                    MethodName       = method.Name,
                    MethodReturnType = method.ReturnType.GetFriendlyName(),
                    MethodParameters = methodParameters,
                    MethodAccessor   = (method.IsPublic ? "public" : "") + (method.IsPrivate ? "private" : ""),
                    Method           = method
                });
            }

            return(serviceModel);
        }