Skip to content

Instantly share code, notes, and snippets.

@jmarnold
Forked from schotime/gist:1113211
Created July 29, 2011 06:03
Show Gist options
  • Save jmarnold/1113223 to your computer and use it in GitHub Desktop.
Save jmarnold/1113223 to your computer and use it in GitHub Desktop.
ValidationBehavior<T>
public interface IModelTypeCoordinator
{
IValidationModel FindGetFor(Type postType);
}
public interface IValidationModel
{
ValidationResult ValidationResult { get; set; }
}
public class ModelTypeCoordinator : IModelTypeCoordinator
{
private readonly IChainResolver _resolver;
public ModelTypeCoordinator(IChainResolver resolver)
{
_resolver = resolver;
}
public IValidationModel FindGetFor(Type postType)
{
var postChain = chain.FindUniqueByInputType(typeof(T));
var getChain = chain.Find(achain.FirstCall().HandlerType, achain.FirstCall().HandlerType.GetMethod("Get"));
return (IValidationModel) Activator.CreateInstance(getChain.InputType());
}
}
public class ValidationBehavior<T> : BasicBehavior where T : class
{
IFubuRequest request;
IPartialFactory _factory;
IModelTypeCoordinator _coordinator;
public ValidationBehavior(IFubuRequest request, IPartialFactory factory, IModelTypeCoordinator coordinator)
: base(PartialBehavior.Executes)
{
this.request = request;
this._factory = factory;
this._coordinator = coordinator;
}
protected override DoNext performInvoke()
{
var model = request.Get<T>();
// validate and return DoNext.Continue if successful
// e.g., var result = _validationProvider.Validate(model);
var target = _coordinator.FindGetFor(model.GetType());
// set ValidationResult property (e.g., target.ValidationResult = result;)
_factory
.BuildPartial(targetType.GetType())
.InvokePartial();
return DoNext.Stop;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment