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!
