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)
我是 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)