用于 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当中应用)