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

Posted

技术标签:

【中文标题】用于 ASP.NET MVC 的没有 DI 容器的控制器的构造函数参数【英文标题】:Constructor parameters for controllers without a DI container for ASP.NET MVC 【发布时间】:2010-09-12 10:40:00 【问题描述】:

除了使用依赖注入容器之外,有没有人有关于如何创建具有参数的控制器的代码示例?

我看到很多使用 StructureMap 等容器的示例,但如果您想自己传递依赖类,则没有。

【问题讨论】:

【参考方案1】:

一种方法是创建一个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());
    

【讨论】:

【参考方案2】:

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

public ProductController() : this( new Foo() )

  //the framework calls this


public ProductController(IFoo foo)

  _foo = foo;

【讨论】:

【参考方案3】:

您可以创建一个 IModelBinder,它从工厂启动实例 - 或者,是的,容器。 =)

【讨论】:

以上是关于用于 ASP.NET MVC 的没有 DI 容器的控制器的构造函数参数的主要内容,如果未能解决你的问题,请参考以下文章

2021-07-04 .NET高级班 88-ASP.NET MVC 控制器工厂实现Unity容器注入

csharp 用于ASP.NET MVC的Castle Windsor IoC容器设置

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

ASP.NET + MVC5 入门完整教程七 -—-- MVC基本工具(上)

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行构造函数和属性的批量依赖注入(MVC当中应用)

替换 ASP.NET Core 内置 DI 容器中的服务注册?