CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets Web Code Search Snippets Search
Sign inor Register
Language: C#

UriBinder processor

196 Views
Copy Code Show/Hide Line Numbers
public class UriBinder : HttpProcessor
{
    private static List<UriBinding> _bindings;
 
    static UriBinder()
    {
        _bindings = new List<UriBinding>();
    }
 
    public static void AddUriBinding<TModel>(string name, string matchRegex, Func<int, object> modelFactory)
    {
        _bindings.Add(new UriBinding() {Name = name, MatchRegex = new Regex(matchRegex), ModelFactory = modelFactory});
    }
 
    public Uri Uri { private get; set; }
    public object Model { get; private set; }
 
    public override void Execute()
    {
        UriBinding foundBinding = null;
        string id = null;
 
        foreach (var binding in _bindings)
        {
            var match = binding.MatchRegex.Match(this.Uri.AbsoluteUri);
            if (match.Success)
            {
                foundBinding = binding;
                id = match.Groups[1].Value;
                break;
            }
        }
 
        if (foundBinding != null)
        {
            Model = foundBinding.ModelFactory(int.Parse(id));
            this.SetArgumentName("Model", foundBinding.Name);
        }
    }
}
 
public class UriBinding
{
    public string Name { get; set; }
    public Regex MatchRegex { get; set; }
    public Func<int, object> ModelFactory { get; set; }
}
 
by Glenn Block
  September 01, 2010 @ 1:19am

Add a comment


Report Abuse
brought to you by:
West Wind Techologies



If you find this site useful and use it frequently please consider making a donation to support this free service.
Donate