Czy w zasadzie jest to zwykły interfejs dla dowolnego kontenera IOC, czy też jest używany w konkretnym środowisku? Toczę swój własny lekki pojemnik IOC i chcę wiedzieć, czy powinienem go wdrożyć. Czy są jakieś inne interfejsy, które powinienem wdrożyć? Nie jestem naprawdę zainteresowany ani MEF, ani jednością. Używałem ich zarówno szeroko, jak i nie pracują dla mojego obecnego projektu.Jakie ramy używają `IServiceProvider`?
Odpowiedz
IServiceProvider
jest importowany (albo utrzymywane przez) COM interfejs, który ma być używany do indywidualnych cech w kontekście obiektu kogo przesłuchać za Usługę. Termin "Usługa" jest tutaj stosowany dość luźno, pierwotnie oznaczał dowolny obiekt COM, który można zwrócić na podstawie podanego identyfikatora GUID.
IServiceProvider @ MSDN (.NET reference)
IServiceProviderImpl Class @ MSDN (C++ ATL reference)
W .NET, nie trzeba wdrożyć go, chyba że masz klienta, który specyficznie obsługującego go, aw wielu przypadkach nie trzeba będzie dodać kolejny poziom zadnie wynika to z używania IServiceProvider
. Można również opracować własny schemat udostępniania wspólnych obiektów lub implementować inne wzorce użycia oparte na IoC/Dependency Injection, które są bardziej elastyczne lub bardziej sztywne, zgodnie z Twoimi potrzebami.
Jednym z dobrych kontekstów historycznych dla IServiceProvider
jest specyfikacja wtyczki przeglądarki IE. W tym miejscu pozwala składnikom wtyczki korzystać z funkcji Host przeglądarki w kontekście. W kontekście COM ten interfejs jest użyteczny, ponieważ ukrywa szczegóły tworzenia instancji, a także może być używany jako część strategii budowy i wykorzystania obiektu, aby uniknąć pętli referencyjnych.
Myślę, że jest to dość ogólny interfejs użytkownika, więc można go używać z niczym. To prawie nie powinno być nawet w bibliotece klasy ramowej. Dla jednego konkretnego zastosowania, Alex D. James z zespołu WCF Data Services ma bloga na ten temat.
Nie sądzę, że ma coś wspólnego z kontenerów IoC. Użyłem Unity i Autofac całkiem sporo i nigdy nie widziałem, żeby był z nimi używany. Co do toczenia własne, chciałbym zaproponować Ci określić swój własny interfejs pojemnik w bardziej standardowy sposób rodzajowy:
public interface IContainer
{
T Resolve<T>();
}
To jest dość standardowe z pewnymi zmianami, ale można też po prostu użyć IServiceProvider czy to pasuje do Twoich potrzeb.
I w tej notatce, chyba że jest to tylko ćwiczenie akademickie, możesz przeczytać "Dependency Injection". Mark Seemann obejmuje każdy kontener i sporo teorii i praktyki. To znaczy, bardzo go polecam.
https://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/
Nowa (od NET 4) Czas trwania buforowania API stosuje się również: http://msdn.microsoft.com/en-us/library/system.runtime.caching.objectcache.host.aspx.
A także projektant Visual Studio.
Program ASP.NET 5 używa trybu IServiceProvider
w trybie "hostowania autonomicznego", to znaczy podczas hostowania aplikacji ASP.NET i środowiska wykonawczego w aplikacji lub usłudze konsoli.
(Obiekt typu Microsoft.Framework.Runtime.Common.DependencyInjection.ServiceProvider
- który implementuje IServiceProvider
- jest przekazywany do konstruktora aplikacji konsoli.)
Tak więc, jeśli chciałbyś użyć innego kontenera IoC w ASP.NET 5, możesz zaimplementować ten interfejs. Lub zawiń drugi kontener IoC w klasę, która implementuje ten interfejs.
ASP.NET Core (poprzednia ASP.NET 5) zawsze używa 'IServiceProvider', nie tylko podczas" self-hostingu ". – John
- 1. Jakie ramy testowania jednostkowego?
- 2. Jakie biblioteki GUI używają jet-mózgów?
- 3. Jakie ramy PHP dla programisty RoR?
- 4. Jakie ramy testowania są używane w Railsach?
- 5. jakie jest zastosowanie ramy, szyby lub panelu w ruchu?
- 6. Jakie ramy wykorzystać do uruchomienia mojego pierwszego projektu scala?
- 7. Jakie są dobre ramy dokowania dla Java/Swing?
- 8. Jakie są dobre ramy testowania jednostek dla projektów Common Lisp?
- 9. Jakie są zalecane ramy do manipulowania danymi przestrzennymi w C++?
- 10. Jakie ramy sprawdzania poprawności poleciłbyś do projektów .net?
- 11. javascript ramy związku wizualizacji
- 12. Jak uzyskać ITypeDescriptorContext i IServiceProvider w odziedziczonej klasie ControlDesigner
- 13. Dlaczego ludzie używają ProjectData
- 14. Open Source filtrowania współpracy ramy
- 15. Nie znaleziono ramy Alamofire
- 16. Programowanie pierwsze, drugie ramy?
- 17. Ramy testowania wielu języków
- 18. Ramy GUI na Powershell?
- 19. Grails dobre ramy BDD
- 20. play ramy niespójne build
- 21. Dialog ramy nie działa
- 22. Nie znaleziono ramy Firebase.
- 23. JHAML i ramy gry?
- 24. Python ramy tk
- 25. HTML5 canvas zaawansowany ramy
- 26. Dlaczego Puppet i Chef używają Ruby?
- 27. Czy abstrakcyjne fabryki używają "nowego"?
- 28. Jakie ramy i importowanie są niezbędne do korzystania z AVAudioPlayer na iOS?
- 29. Jakie są najczęściej używane ramy testowania jednostkowego dla różnych typów aplikacji Ruby?
- 30. Jakie są dobre ramy dla testów jednostkowych i obiektów symulowanych w Perlu?
Nice! Dzięki, będe. – Jordan