Ist die IServiceProvider
im Grunde nur eine generische Schnittstelle für jeden IOC-Container oder wird sie für ein bestimmtes Framework verwendet? Ich rolle meinen eigenen leichten IOC-Container und ich möchte wissen, ob ich ihn umsetzen sollte. Gibt es noch andere Schnittstellen, die ich implementieren sollte? Ich bin nicht wirklich an MEF oder Unity interessiert. Ich habe beide ausgiebig verwendet und sie funktionieren nicht wirklich für mein aktuelles Projekt.Welcher Rahmen verwendet `IServiceProvider`?
Antwort
IServiceProvider
ist ein importiertes (oder vielleicht gehaltene über) COM-Schnittstelle, die für private Funktionen im Rahmen des Objekts verwendet werden soll, den Sie für einen Dienst abfragen. Der Begriff "Service" wird hier eher lose verwendet, er bedeutete ursprünglich jedes COM-Objekt, das basierend auf der gegebenen GUID zurückgegeben werden konnte.
IServiceProvider @ MSDN (.NET reference)
IServiceProviderImpl Class @ MSDN (C++ ATL reference)
In .NET, brauchen Sie nicht, es zu implementieren, wenn Sie einen Client, der es speziell unterstützt, und in vielen Fällen werden Sie nicht noch einen weiteren Dereferenzierungsebene hinzufügen müssen Dies wird durch die Verwendung IServiceProvider
angedeutet. Sie können auch Ihr eigenes Schema entwickeln, um gemeinsame Objekte zu teilen oder andere Nutzungsmuster auf der Basis von IoC/Dependency Injection zu implementieren, die flexibler oder starrer sind, je nach Ihren Anforderungen.
Ein guter historischer Kontext für IServiceProvider
ist das IE Browser Plugin Spec. Hier wird es Plug-In-Komponenten ermöglicht, Browser-Host-Funktionen im Kontext zu verwenden. In einem COM-Kontext ist diese Schnittstelle nützlich, da sie die Details der Instanziierung versteckt und auch als Teil einer Objektkonstruktions- und -verwendungsstrategie verwendet werden kann, um Referenzschleifen zu vermeiden.
Ich denke, es ist eine ziemlich allgemeine Benutzeroberfläche, so dass Sie es mit allem verwenden können. Es sollte fast nicht einmal in der Framework-Klassenbibliothek sein. Für einen bestimmten Zweck hat Alex D. James vom WCF Data Services-Team einen Blog darüber.
Ich glaube nicht, dass irgendetwas mit IoC Container zu tun hat. Ich habe Unity und Autofac ziemlich oft benutzt und habe es nie bei beiden benutzt. Wie für Ihre eigenen Rollen, würde ich vorschlagen, dass Sie Ihre eigenen Container-Schnittstelle in der mehr Standard allgemeiner Weise definieren:
public interface IContainer
{
T Resolve<T>();
}
Das ist ziemlich Standard mit einigen Variationen, aber man könnte auch nur IServiceProvider verwenden, wenn das Ihren Bedürfnissen entspricht.
Und in diesem Sinne, wenn dies nicht nur eine akademische Übung ist, möchten Sie vielleicht "Dependency Injection" lesen. Mark Seemann deckt jeden Container und viel Theorie und Praxis ab. Das heißt, ich kann es nur wärmstens empfehlen.
https://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/
Die neue (wie .NET 4) Runtime Caching API verwendet es auch: http://msdn.microsoft.com/en-us/library/system.runtime.caching.objectcache.host.aspx.
Und auch Visual Studio Designer.
ASP.NET 5 verwendet IServiceProvider
im "selbst gehosteten" Modus, dh beim Hosten einer ASP.NET-Anwendung und der Laufzeit in einer Konsolenanwendung oder einem Dienst.
(Ein Objekt vom Typ Microsoft.Framework.Runtime.Common.DependencyInjection.ServiceProvider
- das IServiceProvider
implementiert - wird an Ihren Konsolen-App-Konstruktor übergeben.)
Wenn Sie also einen anderen IoC-Container in ASP.NET 5 verwenden möchten, möchten Sie diese Schnittstelle möglicherweise implementieren. Oder wickeln Sie den anderen IoC-Container in eine Klasse ein, die diese Schnittstelle implementiert.
ASP.NET Core (früher ASP.NET 5) verwendet immer "IServiceProvider", nicht nur wenn "Self-Hosting". – John
- 1. Welcher Rahmen oder cms soll dafür verwendet werden? Drupal/Codeigniter?
- 2. IServiceProvider in ASP.NET Core-
- 3. Browserbasiertes Spiel - Welcher Rahmen soll gewählt werden?
- 4. Welcher Klassenlader wird verwendet?
- 5. Welcher Parametersatz wurde verwendet?
- 6. Ermitteln, welcher Webserver verwendet wird
- 7. Welcher C++ - Profiler wird verwendet?
- 8. welcher Verschlüsselungsalgorithmus verwendet in ask.fm?
- 9. Herauszufinden, welcher Compiler Maven verwendet
- 10. Bestimmen Sie, welcher Rahmen (Name) eine Funktion in JavaScript
- 11. Welcher Rahmen für ein Webportal, das auf eine CouchDB zugreift?
- 12. Welcher Rahmen für eine Java Web App zu verwenden ist
- 13. WPF WebBrowser-Steuerelement: Welcher Browser wird verwendet?
- 14. Welcher Prozess verwendet alle meine Festplatte IO
- 15. Welcher Partitionsalgorithmus wird verwendet? (für Quicksort)
- 16. Unterscheiden Sie, welcher Authentifizierungsmechanismus verwendet wird
- 17. Welcher Komprimierungsalgorithmus für hochredundante Daten verwendet wird
- 18. Welcher Port wird mit socket.io verwendet?
- 19. Welcher Typ wird automatisch für Container verwendet?
- 20. GIT und SSH, welcher Schlüssel wird verwendet?
- 21. Welcher Datentyp für die Währungsumrechnung verwendet wird
- 22. Welcher "kompatible" Schlüssel wird im Gerätebaum verwendet?
- 23. Welcher Datentyp wird für die Ordinalzahl verwendet?
- 24. Welcher Sortieralgorithmus wird von LINQ "OrderBy" verwendet?
- 25. Welcher Namespace für Details wird häufig verwendet?
- 26. Welcher Dokumentationsgenerator wird für lodash.com verwendet?
- 27. Welcher "Cache" wird in sqlhelperparametercache verwendet
- 28. Welcher Cache-Algorithmus wird in Ccache verwendet?
- 29. Wie wird SASS im ionischen Rahmen verwendet?
- 30. Rahmen/Rahmen um Emacs Rahmen
Schön! Danke, werde ich. – Jordan