J'ai un scénario dans lequel je dois me lier à une interface - pour créer le type correct, j'ai un classeur de modèle personnalisé qui sait comment créer le bon type de béton (qui peut différer). Cependant, le type créé n'a jamais les champs correctement remplis. Je sais que quelque chose me manque ici, mais quelqu'un peut-il me dire pourquoi ou du moins ce que je dois faire pour que le classeur puisse continuer? travailler et lier les propriétés?ModelBinders, Interfaces et types imbriqués complexes
public class ProductModelBinder : DefaultModelBinder
{
override public object BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType == typeof (IProduct))
{
var content = GetProduct (bindingContext);
return content;
}
var result = base.BindModel (controllerContext, bindingContext);
return result;
}
IProduct GetProduct (ModelBindingContext bindingContext)
{
var idProvider = bindingContext.ValueProvider.GetValue ("Id");
var id = (Guid)idProvider.ConvertTo (typeof (Guid));
var repository = RepositoryFactory.GetRepository<IProductRepository>();
var product = repository.Get (id);
return product;
}
}
Le modèle dans mon cas est un type complexe qui a une propriété IProduct, et ce sont ces valeurs que je besoin Remplit
Modèle:.
[ProductBinder]
public class Edit : IProductModel
{
public Guid Id { get; set; }
public byte[] Version { get; set; }
public IProduct Product { get; set; }
}