9

Does anyone have any code examples on how to create controllers that have parameters other than using a Dependency Injection Container?

I see plenty of samples with using containers like StructureMap, but nothing if you wanted to pass in the dependency class yourself.

David Basarab
  • 72,212
  • 42
  • 129
  • 156
Korbin
  • 1,788
  • 2
  • 18
  • 29

3 Answers3

17

One way is to create a ControllerFactory:

public class MyControllerFactory : DefaultControllerFactory
{
    public override IController CreateController(
        RequestContext requestContext, string controllerName)
    {
        return [construct your controller here] ;
    }
}

Then, in Global.asax.cs:

    private void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
        ControllerBuilder.Current.SetControllerFactory(
            new MyNamespace.MyControllerFactory());
    }
Craig Stuntz
  • 125,891
  • 12
  • 252
  • 273
13

You can use poor-man's dependency injection:

public ProductController() : this( new Foo() )
{
  //the framework calls this
}

public ProductController(IFoo foo)
{
  _foo = foo;
}
Ben Scheirman
  • 40,531
  • 21
  • 102
  • 137
1

You can create an IModelBinder that spins up an instance from a factory - or, yes, the container. =)

Matt Hinze
  • 13,577
  • 3
  • 35
  • 40