c# – 这是依赖注入的错误用法吗?
发布时间:2020-12-16 02:04:23 所属栏目:百科 来源:网络整理
导读:我正和一些同事一起研究MVC应用程序.控制器都有一个ServiceFactory使用Unity注入它们… public HomeController(IServiceFactory serviceFactory){ Services = serviceFactory // Where Services is a property of the Controller} 现在,我正在编写一些ViewMo
我正和一些同事一起研究MVC应用程序.控制器都有一个ServiceFactory使用Unity注入它们…
public HomeController(IServiceFactory serviceFactory) { Services = serviceFactory // Where Services is a property of the Controller } 现在,我正在编写一些ViewModel,其中一些ViewModel需要从多个Services访问对象.所以,我有这样的模式…… public class MyViewModel { public MyViewModel(IServiceFactory services) { // Do stuff } } 我的控制器包含这样的代码…… public ActionResult SomeAction() { var model = new MyViewNodel(Services) // ... } 我的一些同事认为这不是DI的正确使用,但似乎无法阐明为什么会这样. 他们是对的吗?如果是这样的话? 解决方法
你的同事抛出危险信号的原因是因为你在服务注入时成功地练习了DI,但是你在控制器动作中新建了一个MyViewModel实例,它从外部“隐藏”了实现细节.
现在,这就是说,因为这个控制器不应该直接从其他代码中消费,而是从网络上消费,你可以认为这是可以接受的.我个人的偏好是因为你已经开始注入依赖项,所以现在不要停止! 编辑: 正如James在评论中提到的那样,通过一个独立的注入工厂解决你的viewmodel实例会好得多.这样您就可以在同一个控制器类中解析多个视图. private readonly IViewModelFactory _factory; public HomeController(IViewModelFactory factory) { _factory = factory; var model = _factory.GetViewModelInstance(); // Where Services is a property of the Controller } 注册时 IMyViewModelFactory 对于您的具体类,解决容器中IServiceFactory的注入,将其突出显示为注入依赖项. public ViewModelFactory(IServiceFactory factory) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |