没有用于ASP.NET MVC的DI容器的控制器的构造函数参数

时间:2020-03-06 14:36:40  来源:igfitidea点击:

没有人有任何代码示例,说明如何创建具有使用依赖注入容器以外的参数的控制器?

我看到大量使用诸如StructureMap之类的容器的示例,但是如果我们想自己传递依赖项类,则什么也没有。

解决方案

我们可以使用穷人的依赖注入:

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

public ProductController(IFoo foo)
{
  _foo = foo;
}

我们可以创建一个IModelBinder来启动工厂或者容器中的实例。 =)

一种方法是创建一个ControllerFactory:

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

然后,在Global.asax.cs中:

private void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
        ControllerBuilder.Current.SetControllerFactory(
            new MyNamespace.MyControllerFactory());
    }