2010-12-14 64 views
1

我想为我们的自定义ModelBinders实现依赖注入。现在我有我可以使用DefaultBinder执行依赖注入吗?

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); 
     } 
    } 
    } 

但我不确定这是否会导致整体表现不佳。任何人都可以用这种方法分享他自己的经验吗?

回答