Dependency injection 如何从已解析的实例在同一激活过程中注入依赖项?

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

我没有找到这个问题的简短形式作为主题

是否可以将已解析实例的属性注入依赖项实例的构造函数

我的问题来自于2009年创建的MVC。 对我来说,这似乎是一种循环依赖

无论如何,我可以:

  • 抓取解析的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的构造函数。唯一可行的方法是在某个地方使用属性注入,但这只是解决实际问题的一个变通方法,因为您有一个循环依赖关系

该实现还将服务紧密地绑定到控制器。请考虑使用模型验证器。