Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 依赖注入和ModelStateWrapper_Asp.net Mvc_Dependency Injection_Unity Container - Fatal编程技术网

Asp.net mvc 依赖注入和ModelStateWrapper

Asp.net mvc 依赖注入和ModelStateWrapper,asp.net-mvc,dependency-injection,unity-container,Asp.net Mvc,Dependency Injection,Unity Container,在教程中,产品服务的构造函数如下所示: ProductService(IValidationDictionary validationDictionary, IProductRepository repository) public ProductController() { _service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository()); } 其在默

在教程中,产品服务的构造函数如下所示:

ProductService(IValidationDictionary validationDictionary, IProductRepository repository)
public ProductController() 
{   
    _service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository());

}
其在默认控制器构造函数中的实例如下所示:

ProductService(IValidationDictionary validationDictionary, IProductRepository repository)
public ProductController() 
{   
    _service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository());

}
如果我想对DI使用Unity,显然应该使用第二个构造函数

public ProductController(IProductService service)
{
    _service = service;
}
但我不知道如何配置Unity来注入ProductService的第一个参数,因为ModelStateWrapper使用控制器中的ModelState,它是在控制器内部创建的,不能被注入。有可能将这种依赖注入ProductService吗?

想想

以下是您试图做的:

  • 为了创建产品控制器,您需要产品服务
  • 为了创建产品服务,您需要产品控制器
你有一个恶性循环,这就是为什么你不能这样做

我不知道如何实现统一,但从概念上讲,您需要打破这个循环,如下所示:

ProductService(IValidationDictionary validationDictionary, IProductRepository repository)
public ProductController() 
{   
    _service = new ProductService(new ModelStateWrapper(this.ModelState), new roductRepository());

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

AFAIKUnity确实支持属性注入,但它要求您将属性放入属性中。如果我是你,我会考虑使用一个不具侵入性的容器(几乎任何其他的容器都更好)。我通过使用以下通用方法创建UnityHelper来解决此问题:public TManager CreateEntityManager(TInnerInterface innerImplementation){this.RegisterInstance(innerImplementation);返回this.Resolve();},然后执行如下解析:IPProductService target=unity.CreateEntityManager(modelStateWrapper);Thanx感谢您的帮助/erikSuffering面临同样的挑战,但使用ASP.NET核心MVC?有什么建议吗?