vendredi 1 janvier 2016

C# evaluating nested property calls from a string

I am currently reading the "500 Lines or Less" book, the chapter for creating a Template Engine.

Their example is using Python. In their template engine they are building code as a string and then they are calling exec (docs) to evaluate the string as Python code.

def get_globals(self):
    """Execute the code, and return a dict of globals it defines."""
    # A check that the caller really finished all the blocks they started.
    assert self.indent_level == 0
    # Get the Python source as a single string.
    python_source = str(self)
    # Execute the source, defining globals, and return them.
    global_namespace = {}
    exec(python_source, global_namespace)
    return global_namespace

This is very convenient, because they can easily evaluate expressions in the template such as {{object.property.property}}

With C# as my main programming language I am wondering how can this be achieved?

Research and thoughts

First I don't believe there is an exec equivalent in C#.

One way I can think of it is to recursively use Reflection to get the List of properties of an object (handling checks for Null References), but I don't like this from performance point of view.

Another way is to use Roslyn's ScriptEngine class (which I haven't used so correct me if I am wrong). But I am afraid that this won't be good because this is supposed to be a library and it won't be able to be used with older versions of C# and .NET. Example





Aucun commentaire:

Enregistrer un commentaire