using System.Collections.Generic; using System.Web.Mvc; using System.Xml; using System.Xml.Linq; using Orchard.Mvc.ModelBinders; namespace Orchard.Core.XmlRpc.Models { public class ModelBinderProvider : IModelBinderProvider, IModelBinder { private readonly IMapper _mapper; public ModelBinderProvider(IMapper mapper) { _mapper = mapper; } public IEnumerable GetModelBinders() { return new[] { new ModelBinderDescriptor { ModelBinder =this, Type=typeof(XRpcMethodCall) } }; } public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { //Ah! xmlrpc is a value provider!!! // TODO: refactor this? using (var xmlReader = XmlReader.Create(controllerContext.HttpContext.Request.InputStream)) { var element = XElement.Load(xmlReader); return _mapper.Map(element); } } } }