Dependency injection 如何从已解析的实例在同一激活过程中注入依赖项?
我没有找到这个问题的简短形式作为主题 是否可以将已解析实例的属性注入依赖项实例的构造函数 我的问题来自于2009年创建的MVC。 对我来说,这似乎是一种循环依赖 无论如何,我可以:Dependency injection 如何从已解析的实例在同一激活过程中注入依赖项?,dependency-injection,inversion-of-control,ninject,Dependency Injection,Inversion Of Control,Ninject,我没有找到这个问题的简短形式作为主题 是否可以将已解析实例的属性注入依赖项实例的构造函数 我的问题来自于2009年创建的MVC。 对我来说,这似乎是一种循环依赖 无论如何,我可以: 抓取解析的ContactController(或其基本控制器,清单3.)实例的属性ModelState 并将其注入其依赖项ContactService(清单4.)实例依赖项ModelStateWrapper(清单7) 作为构造函数参数 \u service=new contactmanager服务(new Mod
- 抓取解析的ContactController(或其基本控制器,清单3.)实例的属性ModelState
- 并将其注入其依赖项ContactService(清单4.)实例依赖项ModelStateWrapper(清单7)
- 作为构造函数参数
\u service=new contactmanager服务(new ModelStateWrapper(this.ModelState))代码>(在清单8之后)
如何用DI容器完成上述任务
我知道,服务层中发生的这种验证可以通过数据注释或自定义属性来完成,我的问题不在于设计或架构,而是可能性
我读过Ninject wiki,一些博客帖子,答案,甚至发现了一些类似的情况,但不是完全像这样,或者无法理解如何实现这一点,或者Ninject是否有可能实现这一点
BR,不,你不能
要查看问题,必须考虑对象的创建顺序
var modelStateWrapper = new ModelStateWrapper();
var service = new ContactService(modelStateWrapper);
var controller = new ContactController(service);
这意味着modelstate包装器是在控制器之前很久创建的,因此不可能将模型状态传递给ModelStateWrapper的构造函数。唯一可行的方法是在某个地方使用属性注入,但这只是解决实际问题的一个变通方法,因为您有一个循环依赖关系
该实现还将服务紧密地绑定到控制器。考虑使用MaldValueStor。 不,你不能< /P>
要查看问题,必须考虑对象的创建顺序
var modelStateWrapper = new ModelStateWrapper();
var service = new ContactService(modelStateWrapper);
var controller = new ContactController(service);
这意味着modelstate包装器是在控制器之前很久创建的,因此不可能将模型状态传递给ModelStateWrapper的构造函数。唯一可行的方法是在某个地方使用属性注入,但这只是解决实际问题的一个变通方法,因为您有一个循环依赖关系
该实现还将服务紧密地绑定到控制器。请考虑使用模型验证器。