我是DI场景的新手,我正在使用Unity和asp.net mvc实现DI场景。
我试图将DbContex
个实例注入我的UnitOfWork
课程。我注册了实例,但是我注意到DbContex
对象已经注入而没有编写用于解析DbContex
的代码。
怎么可能? Unity是否默认解析实例?
我认为我有责任为DI工作编写这个“解析代码”。
例如,当我向Controller中注入依赖项时,我必须在GetControllerInstance方法中编写这样的代码:
return MvcUnityContainer.Container.Resolve(controllerType) as IController
;
答案 0 :(得分:2)
您只需要解析根对象,例如控制器类。然后Unity将查看此类的构造函数,并将看到它具有一些依赖项(构造函数参数)。然后它会自动尝试解决这些依赖关系。如果这些依赖项本身具有依赖项,它将首先解决这些依赖项......
此过程称为自动布线。没有自动接线,为什么有人会使用DI容器? (Not that I think that you should use one in the first place)
答案 1 :(得分:0)
Unity默认情况下“注册”流程中加载的所有具体类型 - 因此您可以使用具体类型调用.Resolve
并获取结果(假设该类型的构造函数实际上可以由Unity调用)。
对于接口,您需要将映射注册到具体类型/实例。