using System;
using System.Linq;
using System.Collections.Generic;
using System.Dynamic;
using ClaySharp;
namespace TheDynamic
{
class Program
{
static void Main(string[] args)
{
// SampleExpando();
SampleClay();
}
static void SampleExpando()
{
dynamic d = new ExpandoObject();
d["LoremIpsum"] = "World"; // ExpandoObject limitation, dictionary-property duality is not possible
Console.WriteLine("Hello {0}", d.LoremIpsum);
Console.ReadLine();
}
// Clay: The power of JavaScript within C#
// http://www.hanselman.com/blog/NuGetPackageOfTheWeek6DynamicMalleableEnjoyableExpandoObjectsWithClay.aspx
static void SampleClay()
{
dynamic New = new ClayFactory();
var great = New.Blah();
// just to prove Clay is more dynamic than ExpandoObject, you can add things at runtime, and access them as property:
// string s = Console.ReadLine(); // Enter this: LoremIpsum
// great[s]
// You can set things via dictionary approach
great["LoremIpsum"] = "World";
// And access them through both property or dictionary approach, just like in JavaScript
Console.WriteLine("Hello: {0} {1}", great.LoremIpsum, great["LoremIpsum"]);
// And vice versa, you can set things using property approach
great.Awe = "Some";
// And access them through both dictionary or property approach, just like in JavaScript
Console.WriteLine("Feelings: {0} {1}", great["Awe"], great.Awe);
var props = new Dictionary<string, object>();
Func<object> nullFunc = () => null;
var clayBehaviorProvider = great as IClayBehaviorProvider;
clayBehaviorProvider.Behavior.GetMembers(nullFunc, great, props);
Console.WriteLine("\n\nLaugh the problems: \n");
foreach (KeyValuePair<string, object> kv in props.Skip(1))
{
Console.WriteLine("{0} {1}", kv.Key, kv.Value);
}
Console.ReadLine();
}
}
// Good read, Clay in action, in ASP.NET MVC! http://orchard.codeplex.com/discussions/406947
}
The output:
Hello: World World Feelings: Some Some Laugh the problems: LoremIpsum World Awe Some
No comments:
Post a Comment