2010-12-14 24 views
1

J'essaye d'implémenter l'injection de dépendance pour nos ModelBinders personnalisés. En ce moment j'aiPuis-je utiliser un DefaultBinder pour faire une injection de dépendance?

protected void Application_Start() 
    { 
     // removed IoC configuration code 

     ModelBinders.Binders.DefaultBinder = new CastleWindsorModelBinder(this.container, ModelBinders.Binders.DefaultBinder); 

     // removed configuration code 
    } 

    public class CastleWindsorModelBinder : IModelBinder 
    { 
    private readonly IWindsorContainer container; 
    private readonly IModelBinder fallback; 

    public CastleWindsorModelBinder(IWindsorContainer container, IModelBinder fallback) 
    { 
     this.container = container; 
     this.fallback = fallback; 
    } 

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     try 
     { 
      var binder = (IModelBinder)this.container.Resolve(
        bindingContext.ModelType.FullName, typeof (IModelBinder)); 

      return binder.BindModel(controllerContext, bindingContext); 
     } 
     catch (ComponentNotFoundException) 
     { 
      return fallback.BindModel(controllerContext, bindingContext); 
     } 
    } 
    } 

mais je ne suis pas sûr si cela entraînera une mauvaise performance globale. Quelqu'un peut-il partager sa propre expérience avec cette approche?

Répondre