If, for whatever reason (I’m not going into this discussion), you’d like to inject your dependencies at the method level instead of using your constructor, like so:
public ActionResult Post(Whatever whatever, IMyDependency dependency)
{
// use dependency here
}
Just create these two classes:
public class DependencyModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(Type modelType)
{
return modelType.IsAbstract ? new DependencyModelBinder() : null;
}
}
public class DependencyModelBinder : IModelBinder
{
object IModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
return DependencyResolver.Current.GetService(bindingContext.ModelType);
}
}
And, of course, at bootstrap/app start time:
ModelBinderProviders.BinderProviders.Add(new DependencyModelBinderProvider());
Voilà, DI at method level in 2 minutes!