ASP.NET-MVC-5依赖项注入

时间:2019-02-07 12:06:27

标签: asp.net-mvc-5

我是mvc 5依赖注入的新手,我知道mvc 5具有默认的无参数构造函数。但是在依赖注入中,我们创建了一个带有参数的构造函数,而IOC容器为该参数提供了对象。我的问题是像unity这样的IOC容器会使mvc 5理解带参数的构造函数

1 个答案:

答案 0 :(得分:0)

它的基本工作方式是,向IoC容器询问类型(“解析”),它将使用反射来查找构造函数(对于Unity,如果它们是多个构造函数,则参数最多的那个) 。然后,它将对每种参数类型本身重复该过程,就像一棵树一直到依赖关系图一样。 Unity将能够自动创建具体类型的实例,但是如果构造函数使用接口或抽象类型,则它需要知道要使用哪种实现,因此在这种情况下,您需要预先注册类型:

注册:

例如container.RegisterType<IUserHelper, UserHelper>();

解决:

例如container.Resolve<IUserHelper>();

IOC容器无法与MVC一起使用,但是存在额外的库,例如Unity.MVC5,它可以挂接到MVC管道中,因此当MVC尝试创建控制器时,它使用IoC容器而不是直接更新控制器(除非没有参数,否则它将失败)。

这里是一个例子:

public class MyController(IUserHelper userHelper, IRepository repository) : Controller

那么我们可以拥有:

public class MyRepository(IDbContext dbContext) : IRepository

public class  MyDbContext () : IDbContext

如果我们使用RegisterType注册IUserHelper,IRepository和IDbContext,则当MVC需要创建控制器时,它将能够构建具有所有依赖关系的控制器。