我没有找到这个问题的简短形式作为主题......
是否可以将已解析的实例的属性注入依赖项实例的构造函数?
我的问题来自于2009年创建的MVC tutorial。 这似乎是对我的循环依赖。
无论如何,我可以:
_service = new ContactManagerService(new ModelStateWrapper(this.ModelState));
(清单8之后。)
如何使用DI容器完成上述行?
我知道服务层中发生的验证可以通过数据注释或自定义属性来完成,我的问题不是关于设计或架构,而是可能性。
我已经阅读了Ninject wiki,一些博客文章,答案,甚至发现了一些类似的情况,但不完全是这样,或者无法弄清楚如何实现这一点,或者是否可以使用Ninject。
BR,
答案 0 :(得分:1)
不,你不能
要查看问题,您必须考虑创建对象的顺序
var modelStateWrapper = new ModelStateWrapper();
var service = new ContactService(modelStateWrapper);
var controller = new ContactController(service);
这意味着在控制器之前很久就创建了modelstate包装器,因此无法将模型状态传递给ModelStateWrapper的构造函数。唯一可行的是在某处使用Property Injection,但这只是实际问题的一种解决方法,即你有一个循环依赖。
该实现还将服务紧密地绑定到控制器。请考虑使用ModelValidators。