C# 如何将多个依赖项注入控制器?

C# 如何将多个依赖项注入控制器?,c#,dependency-injection,mocking,unity-container,moq,C#,Dependency Injection,Mocking,Unity Container,Moq,我使用Unity库来使用依赖注入。我有一个controllerproduct,下面是构造函数代码 public ProductController(IService1 ser1,IService2 ser2,IService3 ser3,IService4 ser4) { this._Service1 = ser1; this._Service2 = ser2; this._Service3 = ser3; this._Service4 = ser4; } 下面

我使用Unity库来使用依赖注入。我有一个controllerproduct,下面是构造函数代码

public ProductController(IService1 ser1,IService2 ser2,IService3 ser3,IService4 ser4)
{
    this._Service1 = ser1;
    this._Service2 = ser2;
    this._Service3 = ser3;
    this._Service4 = ser4;
}
下面是该控制器的单元测试代码。它将4个以上的服务类对象注入到该控制器的构造函数中

  ProductController _productController;
  Mock<IService1> _ser1Mock;
  Mock<IService2> _ser2Mock;
  Mock<IService3> _ser3Mock;
  Mock<IService4> _ser4Mock;

  if(_productController!=null)
  {
     _productController = new ProductController(
         _ser1Mock.Object,_ser2Mock.Object,_ser3Mock.Object,_ser4Mock.Object) 
  }
在这里,我将多个dependenciesservices对象注入控制器的构造函数。单元测试方法也很有效,但是当我运行应用程序时,它就不起作用了

它给出了“错误500”

我想知道,如果您有多个依赖项,并且希望将这些依赖项注入控制器,我们应该怎么做。我们需要单独注入还是可以像上面一样注入onceli

下面是引导程序文件代码 使用System.Web.Mvc; 使用Microsoft.Practices.Unity; 使用Unity.Mvc4

public static class Bootstrapper
{
    public static IUnityContainer Initialise()
    {
        var container = BuildUnityContainer();

        DependencyResolver.SetResolver(
            new UnityDependencyResolver(container));

        return container;
    }

    private static IUnityContainer BuildUnityContainer()
    {
        var container = new UnityContainer();
        RegisterTypes(container);
        return container;
    }

    public static void RegisterTypes(IUnityContainer container)
    {
        container.RegisterType<IService1Dal,Service1Dal>();
        container.RegisterType<IService1,Service1>();
        container.RegisterType<IService2Dal,Service2Dal>();
        container.RegisterType<IService2,Service2>();
        container.RegisterType<IService3Dal,Service3Dal>();
        container.RegisterType<IService3,Service3>();
        container.RegisterType<IService4Dal,Service4Dal>();
        container.RegisterType<IService4,Service4>();    
    }
}
您需要确保您解决了Unity注入东西所需的问题,在顶层,一旦您完成了,就不应该再次显式地使用容器。检查您是否正在这样创建:

_productController = container.Resolve<IProductController>();

据我所知,您并没有注入任何东西,您只是在调用一个构造器,告诉我们您的Unity配置XML或Fluent。这可能就是问题所在。另外,您在哪里/如何注入/解析?我希望不要打电话给新的ProductController@Belogix,我已经更新了配置代码。有什么例外吗?Unity正在解析应用程序的控制器吗?如果是,Unity将注入所需组件的实例,只要它们也向Unity注册。如果Unity没有为您解析控制器,请看下面的示例,其中有一个如何创建UnityController工厂的示例
container.RegisterType<IProductController, ProductController>();