Могу ли я использовать DefaultBinder для внедрения зависимостей? - PullRequest
1 голос
/ 14 декабря 2010

Я пытаюсь реализовать внедрение зависимостей для наших пользовательских ModelBinder. Прямо сейчас у меня есть

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

но я не уверен, приведет ли это к снижению производительности в целом. Кто-нибудь может поделиться своим опытом с этим подходом?

1 Ответ

2 голосов
/ 15 декабря 2010

MvcContrib уже имеет это. См. исходный код и тесты .

...