MVC - Cio de l'Unité - assurez-vous que le contrôleur dispose d'un constructeur public sans paramètre

Problème

Je suis à l'aide de l'Unité du Cio et qui a bien fonctionné, mais comme je l'ai garder l'ajout d'une fonctionnalité, il devient de plus en plus difficile à repérer toutes les erreurs, parce que l'Unité fournit une erreur qui est le symptôme de l'erreur, de ne pas l'erreur:

"Message":"An error has occurred.","ExceptionMessage":"An error occurred
when trying to create a controller of type 'MyController'. Make sure that the
controller has a parameterless public
constructor.","ExceptionType":"System.InvalidOperationException"

Fond

J'ai un MVC, Web Api contrôleur qui a une dépendance sur une instance du Gestionnaire (de domaine):

public class MyController : ApiController
{
    private IMyManager MyManager { get; set; }

    public MyController(IMyManager myManager)
    {
        this.MyManager = myManager;
    }

    ...
}

L'erreur ci-dessus se produit parce que le Cio cartographie de la IMyManager échoue. Comme il échoue, je n'ai pas de paramètre, ce qui signifie que MyController est appelée à l'aide d'un constructeur sans paramètre, mais comme il n'existe pas (et ne devrait pas), j'ai l'erreur ci-dessus.

Ce que j'ai essayé

Donc, l'erreur que j'obtiens est pas la "vraie" erreur. La chose la plus évidente est de faire en sorte que chaque nouvelle mise en œuvre, est enregistré en vertu du Cio, j'ai vérifié et ils sont. - Je le faire manuellement pour garder les choses gérable (ô ironie!).

- Je le faire comme ceci:

container.RegisterType<IMyManager, MyManager>();

Mais, ce n'est pas la question.

Une des solutions que j'ai fait était une dépendance circulaire. J'ai changé toutes les personnes impliquées constructeurs et les méthodes d'utilisation de la propriété des valeurs, pas les instances.
J'ai vérifié toutes les personnes impliquées classes et il n'y a plus de dépendances circulaires.

Encore, le problème persiste.

La question

Que puis-je faire pour trouver le problème réel? Vérification manuelle des dépendances est beaucoup trop généraux, parce que la structure est un ensemble complexe de plus profond des dépendances. Et cela va s'aggraver à mesure que l'application évolue.

Sinon, si l'Unité tout obscurcit toujours ces messages (sans être en mesure de corriger cela), il y a des alternatives qui fournissent la peine d'informations d'erreur?

Mise à JOUR

Par demande, le message d'erreur complet (bien que je ne pense pas que la stacktrace est très utile):

{"Message":"An error has occurred.","ExceptionMessage":"An error occurred when trying to create a controller of type 'MyController'. Make sure that the controller has a parameterless public constructor.","ExceptionType":"System.InvalidOperationException","StackTrace":"   at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()","InnerException":{"Message":"An error has occurred.","ExceptionMessage":"Type 'MyProject.Web.Api.Controllers.MyController' does not have a default constructor","ExceptionType":"System.ArgumentException","StackTrace":"   at System.Linq.Expressions.Expression.New(Type type)
at System.Web.Http.Internal.TypeActivator.Create[TBase](Type instanceType)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)"}}

Mise à JOUR 2

J'ai creusé un peu plus profond et vérifié toutes les dépendances (ils sont assez massif), mais tout est enregistré et chargé correctement. Là aussi ne sont pas toutes les dépendances circulaires, donc autant que je peux dire tout ce que "devrait", travail. Car il n'ai-je pas conclure qu'il y a une erreur qui se passe qui n'est pas d'être jetés.

La plupart du temps, l'Unité met détaillée exception dans une chaîne où vous avez une exception à l'intérieur d'exception et l'exception interne et le dernier est le véritable problème. N'est-ce pas se comporter comme cela dans votre cas?
Jetez un oeil à cette q/r: stackoverflow.com/a/15910758/264697. Il suffit de remplacer les mots "de l'API Web" avec "MVC" et "Simple Injecteur" avec "l'Unité" et vous aurez une bonne description de ce qui se passe ici. TLDR; Inscrivez vos contrôleurs explicitement.
L'unité de ne pas cacher les erreurs et les erreurs que vous avez des erreurs produites par l'Unité de ce que je peux voir. Il semble que vous n'avez pas votre WebAPI accroché pour l'injection de dépendance. Vous devez le configurer pour utiliser le même conteneur si vous ne l'avez pas déjà. Ne l'injection de dépendance travailler dans l'un de vos WebAPI contrôleurs, ou est-ce le premier?
Notez que vous devez poster à l'exception complète l'information + la trace de la pile, parce que, souvent, contient des informations essentielles nous en dire plus sur ce qui se passe. Sans cette information, il nous suffit de deviner.

OriginalL'auteur Spikee | 2015-10-14