summaryrefslogtreecommitdiff
path: root/CSharp/Ivy/IvyPPC/IvyBindingAttribute.cs
blob: 90c44ce68104813df46109db520bf1b62c98329d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Text;

namespace IvyBus
{
    [AttributeUsage(AttributeTargets.Method,AllowMultiple = true)]
    public sealed class IvyBindingAttribute : Attribute
    {
        private string expression;
        private string[] args;

        // translate part of expression to object property
        public string GetExpression(object obj)
        {
            if (obj == null) return string.Format(expression);
            object[] values = new object[args.Length];
            for (int i = 0; i < args.Length; i++)
            {
                values[i] = obj.GetType().GetProperty(args[i]).GetValue(obj,null);
            }
            return string.Format(expression,values);
        }

        public IvyBindingAttribute(string expression, params string[] args)
        {
            this.expression = expression;
            this.args = args;
        }
    }
}