asp.net-mvc - 依赖注入(inject)和 ModelStateWrapper

标签 asp.net-mvc dependency-injection unity-container

在教程Validating with a service layer产品服务的构造函数如下所示:

ProductService(IValidationDictionary validationDictionary, IProductRepository repository)

它在默认 Controller 构造函数中的实例是这样创建的:
public ProductController() 
{   
    _service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository());

}

如果我想将 Unity 用于 DI,显然应该使用第二个构造函数。
public ProductController(IProductService service)
{
    _service = service;
}

但是后来我不知道配置Unity来注入(inject)ProductServise的第一个参数,因为ModelStateWrapper使用来自 Controller 的ModelState,它是在 Controller 内部创建的,不能注入(inject)。是否可以将这种依赖注入(inject)ProductService?

最佳答案

思考。

这是您要执行的操作:

  • 为了创建产品 Controller ,您需要产品服务
  • 为了创建产品服务,您需要产品 Controller

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

    我不知道 Unity 的实现,但从概念上讲,您需要打破循环,如下所示:
  • 创建产品 Controller 而不将产品服务传递给它
  • 创建产品服务并将产品 Controller 的模型状态传递给它
  • 通过属性注入(inject)将产品服务注入(inject)产品 Controller

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

    关于asp.net-mvc - 依赖注入(inject)和 ModelStateWrapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/772840/

    相关文章:

    c# - UnityContainer,子容器注入(inject)

    .net - 自创建数据库以来,支持 'ApplicationDbContext' 上下文的模型已更改

    c# - 在连接字符串中使用 App_Data

    c# - 如何在播种过程中将 en 实体 ID 传递给另一个实体?

    dependency-injection - 从 ASP.NET Core 依赖注入(inject)中获取 ClaimsPrincipal 或 ClaimsIdentity

    php - 将 kernel.root_dir 注入(inject) Symfony2 中的实体构造函数

    jquery - 是否可以使用 jQuery 将文件从文件输入传递到 Controller ?

    c# - PRISM + MEF -- 导入 & ImportMany

    wpf - Prism中的MVVM多个 View 相同的ViewModel

    c# - 具有静态和动态依赖关系的 IoC