在教程中使用服务层进行验证 http://www.asp.net/learn/mvc/tutorial-38-cs.aspx产品服务的构造函数如下所示:
ProductService(IValidationDictionary validationDictionary, IProductRepository repository)
它在默认控制器构造函数中的实例是这样创建的:
public ProductController()
{
_service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository());
}
如果我想使用 Unity 进行 DI,显然应该使用第二个构造函数。
public ProductController(IProductService service)
{
_service = service;
}
但是我不知道如何配置Unity来注入ProductServise的第一个参数,因为ModelStateWrapper使用控制器中的ModelState,它是在控制器内部创建的并且无法注入。是否可以将这种依赖项注入到ProductService中?
Think.
这就是你想要做的事情:
- 为了创建产品控制器,您需要产品服务
- 为了创建产品服务,您需要产品控制器
你有一个恶性循环,这就是你做不到的原因。
我不知道 Unity 的实现,但从概念上讲,你需要打破这个循环,如下所示:
- 创建产品控制器而不向其传递产品服务
- 创建产品服务并将产品控制器的模型状态传递给它
- 通过属性注入将产品服务注入产品控制器
AFAIK unity 确实支持属性注入,但它要求您将属性添加到属性上。如果我是你,我会考虑使用侵入性较小的容器(几乎任何其他容器都更好)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)