コード例 #1
0
        private static void BuildClass(ServiceClassBuilder builder, Type type)
        {
            //
            // Build...
            //

            IServiceClassReflector reflector = (IServiceClassReflector)FindCustomAttribute(type, typeof(IServiceClassReflector), true);

            if (reflector == null)
            {
                reflector = new JsonRpcServiceAttribute();
                TrySetAttachment(reflector, type);
            }

            reflector.Build(builder);

            //
            // Fault in the type name if still without name.
            //

            if (builder.Name.Length == 0)
            {
                builder.Name = type.Name;
            }

            //
            // Modify...
            //

            object[] modifiers = GetCustomAttributes(type, typeof(IServiceClassModifier), true);
            foreach (IServiceClassModifier modifier in modifiers)
            {
                modifier.Modify(builder);
            }
        }
コード例 #2
0
        private static ServiceClass BuildFromType(Type type)
        {
            ServiceClassBuilder builder = new ServiceClassBuilder();

            BuildClass(builder, type);
            return(builder.CreateClass());
        }
コード例 #3
0
        public void FirstParameterOfStaticMethodDoesNotAppearInTheReflectedModel()
        {
            ServiceClassBuilder    scb        = new ServiceClassBuilder();
            MethodInfo             method     = typeof(ServiceWithStaticMethod).GetMethod("StaticMethod");
            JsonRpcMethodAttribute attribute  = new JsonRpcMethodAttribute();
            IAttributeAttachment   attachment = attribute;

            attachment.SetAttachment(method);
            IMethodReflector reflector = attribute;
            MethodBuilder    mb        = scb.DefineMethod();

            reflector.Build(mb);
            Assert.AreEqual(0, mb.Parameters.Count);
        }
コード例 #4
0
        void IServiceClassReflector.Build(ServiceClassBuilder builder)
        {
            if (_type == null)
            {
                throw new InvalidOperationException();
            }

            builder.Name = Name;

            //
            // Get all the public instance methods on the type and create a
            // filtered table of those to expose from the service.
            //

            MethodInfo[] publicMethods = _type.GetMethods(BindingFlags.Public | BindingFlags.Instance);

            foreach (MethodInfo method in publicMethods)
            {
                if (JsonRpcServiceReflector.ShouldBuild(method))
                {
                    JsonRpcServiceReflector.BuildMethod(builder.DefineMethod(), method);
                }
            }
        }
コード例 #5
0
 void IServiceClassModifier.Modify(ServiceClassBuilder builder)
 {
     builder.Description = Text;
 }