Assurez-vous que le contrôleur a un constructeur public sans paramètre dans Unity

J’ai eu ce problème avec le contrôleur:
Une erreur s’est produite lors de la tentative de création d’un contrôleur de type ‘ * .WebMvc.Controllers.HomeController’. Assurez-vous que le contrôleur a un constructeur public sans paramètre.

Trouvez la solution pour ApiController, mais n’avez rien trouvé à propos du contrôleur normal.

Créé le nouveau projet MVC 4 à partir de zéro.

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())); } 

Débogué et découvert qu’il n’y a même aucune tentative de résoudre IAccountingUow.

Qu’est-ce que je fais mal? J’y pense toute la journée.

    Trouvé où est le problème. Peut-être que quelqu’un fera face à la même chose. Le problème est IAccountingUow n’a pas pu résoudre le problème IAccountingUow en raison de la dépendance hiérarchique des interfaces.

    AccountingUow classe AccountingUow a deux convertisseurs

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

    Le résolveur de dépendance n’est pas assez intelligent pour prendre le constructeur par défaut sans parameters. Il essaie de prendre un constructeur dépendant de l’interface et ne parvient pas à le résoudre, car il n’y a pas de règles pour le résoudre.

    J’ai commenté le constructeur dépendant de l’interface et tout a bien fonctionné.

    Je posterai plus tard le résolveur pour le premier constructeur, peut-être que quelqu’un l’utilisera.

    Cela peut également être dû à une exception dans le constructeur de paramètre externe du type externe en cours de résolution. Les dépendances du constructeur de ce type peuvent être résolues correctement, mais s’il existe une exception dans le constructeur externe, Unity l’indiquera comme ” Type Test.Controllers.MyControllerWithInjectedDependencies n’a pas de constructeur par défaut”.