2012-08-09 7 views
7

Staramy się zastąpić poprzednie DefaultControllerFactory nowym API ASP.NET Web, aby lepiej obsługiwać wywołania REST/XML. Wyszukiwanie w sieci zawsze wskazywało implementowanie System.Web.Http.Dependencies.IDependencyResolver, a następnie obsługę GetService() i kilku innych metod wymaganych przez interfejs.Co to jest odpowiednik DefaultControllerFactory w Web API?

Wygląda na to, że buforuje instancję ApiController i każdy nowy kontroler, ale wygląda na to, że nie rozwiązuje problemu. Trudno jest zapewnić wszystkie możliwe instancje ApiController podczas uruchamiania z powodu problemów z wydajnością.

DefaultControllerFactory umożliwia dostarczanie wystąpień kontrolera i zapisywanie w pamięci wpisów "trafień", ale generuje błędy, gdy nie można wczytać opóźnienia w instancie.

Czy istnieją inne metody fabryczne przeciążenia/kontrolera, które wymagają wdrożenia?

Wyszukiwanie nie przyniosło żadnych trafień, ale wszelkie wskazówki będą świetne. Dziękuję za Twój czas.

+0

DefaultControllerFactory jest od wersji beta, a nie w RC już, proszę można opracować więcej „, aby lepiej obsługiwać REST/wywołania XML, co chcesz obsługiwać –

+0

Korzystanie domyślne? kontroler jest ładowany dynamicznie na żądanie Ten kontroler ma metody obsługi zarówno formatów xml/json przy użyciu różnych API (ma przyrostki json lub xml) .Zarządzanie równoważnikami, które zasadniczo robi to samo staje się problemem. do dbania o formaty mediów i chcemy przenieść je do tego modelu, ale dynamiczne ładowanie kontrolera wydaje się być problemem: – sraj

+1

jeśli chcesz użyć sufiksu json/xsml Dlaczego nie skorzystać z UriPathExtensionMapping? –

Odpowiedz

7

Jest to IHttpControllerActivator wdrożone przez DefaultHttpControllerActivator.

Można go zastępuje, używając:

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), 
     new MyOwnActivatior()); 

Ups!

Miałem na myśli !


Jest IHttpControllerSelector realizowane przez DefaultHttpControllerSelector.

Można go zastępuje, używając:

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), 
     new MyOwnActivatior()); 
+1

Dziękuję. Działa to, jeśli kontroler istnieje w zespole. Mamy jednak potrzebę dynamicznego ładowania kontrolera w zależności od złożonego żądania. W takim przypadku wywołanie nie przychodzi do aktywatora kontrolera. Na przykład. http: // localhost: 9999/api/customapi/get/1 działa, jeśli w zespole istnieje typ o nazwie "CustomAPIController". Jednak http: // localhost: 9999/api/customapidynamic1/get/1 nie wydaje się wywoływać metody Create() aktywatora kontrolera. Przeznaczeniem jest znalezienie obciążenia typu sterownika na żądanie. – sraj

+3

W takim przypadku może zajść konieczność zastąpienia jednego lub więcej z następujących elementów: IHttpControllerSelector (wybiera kontroler), IHttpControllerTypeResolver (podaje listę typów kontrolerów do IHttpControllerSelector), IAssembliesResolver (zawiera listę złożeń). Zobacz http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection –

+0

Dziękuję MikeWasson.Spróbuję więcej z tych interfejsów. Chciałbym, żeby to nie było takie trudne. – sraj

Powiązane problemy