Web-Api-Start-up-Ausnahmen mit IDependencyResolver Umsetzung
Ich bin der Entwicklung einer Web-Api, und ich beschloss, verwenden Sie benutzerdefinierte DependencyResolver. Ich beziehe mich diese [Dependency Injection für Web-API-Controller] Artikel. Alles funktioniert so weit gut im Bezug auf dependency injection in den Controller. Code-snippet von meiner Konfiguration aus meiner Owin startup class
private void RegisterIoC(HttpConfiguration config)
{
_unityContainer = new UnityContainer();
_unityContainer.RegisterType<IAccountService, AccountService>();
.........
.........
config.DependencyResolver = new UnityResolver(_unityContainer);
}
Aber zu der Zeit wenn Api startet zum ersten mal einige ResolutionFailedException geworfen (aber heute) innerhalb der UnityResolver ist GetService Methode. Hier ist die exception-message
"Exception occurred while: while resolving.
Exception is: InvalidOperationException -
The current type, System.Web.Http.Hosting.IHostBufferPolicySelector,
**is an interface and cannot be constructed. Are you missing a type mapping?**"
Oben gleichen Ausnahme geworfen werden folgende Arten
System.Web.Http.Hosting.IHostBufferPolicySelector
System.Web.Http.Tracing.ITraceWriter
System.Web.Http.Metadata.ModelMetadataProvider
System.Web.Http.Tracing.ITraceManager
System.Web.Http.Dispatcher.IHttpControllerSelector
System.Web.Http.Dispatcher.IAssembliesResolver
System.Web.Http.Dispatcher.IHttpControllerTypeResolver
System.Web.Http.Controllers.IHttpActionSelector
System.Web.Http.Controllers.IActionValueBinder
System.Web.Http.Validation.IBodyModelValidator
System.Net.Http.Formatting.IContentNegotiator
Weiß ich, dass diese ResolutionFailedException geworfen, weil ich nicht Zuordnungen in meiner Einheit-Konfiguration für oben genannten Typen.
Jetzt hier meine Frage :-, Wenn ich das implementieren benutzerdefinierter Einheit DependencyResolver ich brauche definieren von Zuordnungen der oben genannten Arten und, wenn nötig, zu definieren, was sein wird, Ihre entsprechenden default-Implementierung-Typen ODER gibt es eine alternative Möglichkeit zur Umsetzung DependencyResolver. Ich bin wirklich besorgt, auch wenn die Anwendung läuft jetzt gut, nicht beheben oben genannten Art kann zu schweren Problem später. Bitte helfen.
Eine Letzte Ergänzung:-
Für folgende Arten, die gleiche ResolutionFailedException geworfen, wenn ich Anfrage, für jede Aktion in der mein web-api
System.Web.Http.Dispatcher.IHttpControllerActivator
System.Web.Http.Validation.IModelValidatorCache
System.Web.Http.Controllers.IHttpActionInvoker
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche Problem mit der Einheit mit der WebApi und OWIN/Katana.
Die Lösung für mich war, mit UnityDependencyResolver definiert in der Einheit.WebApi Nuget-Paket-anstelle meiner eigenen Umsetzung (wie @Omar Alani oben)
Beachten Sie, dass das Paket versuchen, und fügen Sie eine Datei namens UnityConfig.cs im App_Start (das mit dem Namen habe ich mich eingesetzt).
In diesem UnityConfig.cs-Datei wird das Paket fügen Sie code zum registrieren der container gegen die
GlobalConfiguration.Configuration.DependencyResolver
was nicht, was wir wollen, mit OWIN.Anstatt also mit:
Ändern zu verwenden:
Vollständigkeit halber:
Meine UnityConfig.cs
Mein Start.cs
Im Falle einer der oben genannten Lösungen noch nicht für Menschen arbeiten, ist hier, wie ich gelöst.
Nachdem er einen Tag jagt dieser Fehler, es stellte sich heraus, dass irgendeine Art von VS-caching-Problem. Aus Verzweiflung habe ich alles gelöscht .suo-Dateien und Kraft bekommen-die Letzte, das zu haben scheint, ist das Problem behoben.
Dieser aufgefordert wurde, eine lange Zeit her, aber ich habe eine Lösung gefunden, die nicht aufgeführt war hier ja vielleicht noch jemand interessiert.
In meinem Fall, diese Ausnahmen wurden bereits gefangen intern von Unity (oder was auch immer), aber meine Ausnahme Einstellungen in Visual Studio machte Sie noch zeigen. Ich musste Sie nur deaktivieren Sie das "Brechen bei diesem Typ der Ausnahme wird angezeigt" check-box und die Anwendung ging auf normal funktioniert.
Die Umsetzung der
Unity.WebAPI
ist nicht sehr Verschieden ist von der in der Frage genannten. Ich mochte die version bezeichnet, die durch die OP, wie es ignoriert nurResultionFailedException
und lässt den rest propagieren den Stapel.Unity.WebAPI
unterdrückt alle Ausnahmen. Was ich tun würde, ist, ignorieren Sie Fehler, die wir kennen, sind sicher, dies zu tun und log (oder rethrow) andere.Normalerweise brauchen Sie nicht, um mit der Einheit.
Ich benutze diese Umsetzung für IDependencyResolver mit unity, und ich habe nicht zu registrieren oder anzeigen andere als meine interfaces/services.
wo Einweg ist nur eine Basis-Klasse implementiert IDispoable.
Hoffe, das hilft.
ResolutionFailedException
s, aber es scheint sich etwas geändert hat in der neuesten version, machen dies notwendig. - Es ist eine echte Schande, weil der Vorherige code "einfach funktioniert" ohne diese Art von workarounds -- es hörte erst auf, als wir gezwungen wurden, aktualisieren Sie die NuGet-Pakete...Als dies scheint immer noch umstritten, hier ist meine version von dem code...
und
Schließlich bits sind die Erweiterungen zu verwenden, die den Gültigkeitsbereich container in der Owin-middleware sowie gerade WebAPI
Der Grund für diese ist das original MVC-Workitem, wo wir sehen,
und
Aus meiner eigenen Erfahrung, wenn Sie nicht dieses Formular verwenden, der code, es funktioniert in der debug etc aber es wird nicht skaliert, und starten seltsam verhält.
Ich gelöscht hat dependencyResolver und das problem war gelöst