4

在教程中使用产品服务的服务层构造函数进行验证如下所示:

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?

4

1 回答 1

0

思考。

这是您要执行的操作:

  • 为了创建产品控制器,您需要产品服务
  • 为了创建产品服务,您需要产品控制器

你有一个恶性循环,这就是你做不到的原因。

我不知道 Unity 的实现,但从概念上讲,您需要打破循环,如下所示:

  • 创建产品控制器而不将产品服务传递给它
  • 创建产品服务并将产品控制器的模型状态传递给它
  • 通过属性注入将产品服务注入产品控制器

AFAIK unity 确实支持属性注入,但它需要您将属性放到属性上。如果我是你,我会考虑使用侵入性较小的容器(几乎任何其他容器都更好)。

于 2009-04-22T08:52:21.107 回答