确保控制器在Unity中具有无参数的公共构造函数

我在控制器中遇到了这个问题:
尝试创建类型为“ * .WebMvc.Controllers.HomeController”的控制器时发生错误。 确保控制器具有无参数的公共构造函数。

找到ApiController的解决方案,但没有找到任何关于普通控制器的信息。

从头开始创建新的MVC 4项目。

HomeController.cs:

public class HomeController : Controller { private IAccountingUow _uow; public HomeController(IAccountingUow uow) { _uow = uow; } 

UnityDependencyResoler.cs:

 public class UnityDependencyResolver : IDependencyResolver { private IUnityContainer _container; public UnityDependencyResolver(IUnityContainer container) { _container = container; RegisterTypes(); } public object GetService(Type serviceType) { try { return _container.Resolve(serviceType); }catch { return null; } } public IEnumerable GetServices(Type serviceType) { try { return _container.ResolveAll(serviceType); }catch { return null; } } private void RegisterTypes() { _container.RegisterType(); } } 

Global.asax中

  protected void Application_Start() { //Omitted DependencyResolver.SetResolver( new UnityDependencyResolver( new UnityContainer())); } 

调试并发现,甚至没有尝试解决IAccountingUow。

我做错了什么? 整天思考它。

发现问题出在哪里。 也许有人会面对同样的问题。 问题是Unity无法解析IAccountingUow ,因为接口的层次依赖性。

AccountingUow类有两个contuctors

  public AccountingUow( IRepositoryProvider repositoryProvider) { Init(repositoryProvider); } public AccountingUow() { Init( new RepositoryProvider(new RepositoryFactories()) ); } 

依赖性解析器不应该采用默认的无参数构造函数。 它尝试接受依赖于接口的构造函数并且无法解析它,因为没有解决它的规则。

我注释掉了依赖于接口的构造函数,一切正常。

我将在以后的解析器中发布第一个构造函数,也许有人会使用它。

这也可能是由于正在解析的外部类型的参数注入构造函数中的exception。 该类型的构造函数的依赖关系可能会成功解析,但如果外部构造函数中存在exception,Unity会将其报告为“ Type Test.Controllers.MyControllerWithInjectedDependencies没有默认构造函数”。