Unity MVC 默认解析类型吗?

Does Unity MVC resolve types by default?

我是 DI 场景的新手,我正在使用 Unity 和 asp.net mvc 实现 DI 场景。

我试图将 DbContex 实例注入我的 UnitOfWork class。我注册了这个实例,但我注意到 DbContex 对象已经被注入,而没有编写解析 DbContex.

的代码

怎么可能? Unity 是否默认解析实例?

我认为我有责任写这个 "resolving code" 让 DI 工作。

例如,当我将依赖项注入控制器时,我必须在 GetControllerInstance 方法中编写如下代码:

return MvcUnityContainer.Container.Resolve(controllerType) as IController;

Unity 默认 "registers" 进程中加载​​的所有具体类型 - 因此您可以使用具体类型调用 .Resolve 并获得结果(假设该类型的构造函数实际上可以被 Unity 调用)。

对于接口,您需要注册到具体的映射 type/instances 所以。

您只需解析根对象,例如控制器class。然后 Unity 会查看此 class 的构造函数,并会发现它具有一些依赖项(构造函数参数)。然后它将自动尝试解决这些依赖关系。如果这些依赖本身有依赖,它会先解决这些...

这个过程称为自动装配。没有自动装配,为什么会有人使用 DI 容器? (Not that I think that you should use one in the first place)