2014-10-14 55 views
5

Korzystanie katana, dlaczego Uruchomienie klasa nie powinna wdrożyć odpowiedni interfejs, jak na przykład:Dlaczego wymagana klasa początkowa nie musi implementować odpowiedniego interfejsu, takiego jak IStartup?

interface IStartup 
{ 
    void Configuration(IAppBuilder app); 
} 

public class MyStartup : IStartup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ... 
    } 
} 

myślę, że może to być znacznie bardziej intuicyjna dla deweloperów, aby zrozumieć, co powinni dostarczyć z metody WebApp.Start<T> jako argument T zamiast zgadywać i szuka przykładów, powinno być bardziej wyraźne:

public void Start<T>() where T : IStartup 
+0

Czy jest więcej niż jedna klasa startowa? Czy nie jest to metoda, którą i tak stosujesz? –

+0

@RobertHarvey tak, może być więcej niż 1 Klasa uruchamiania, na przykład, gdy jestem jednostkowy i potrzebuję jakiegoś fałszywego serwera. –

+0

@RobertHarvey Jeśli napotkasz następujący kod 'WebApp.Start ', jak możesz dowiedzieć się, jakie wymaganie 'T' powinno być bez patrzenia na dokumenty i przykłady? –

Odpowiedz

4

powodem jest to „nie bez powodu”. Istnieją interfejsy do komunikowania struktury i celu implementatorowi (abstrakcyjne klasy również to robią, wraz z minimalnym zachowaniem). Bez nich pozostaniemy z konwencją. W tym przypadku, nie ograniczając TStartup, OWIN pozwala ci używać dowolnej bzdurnej klasy Startup i może tylko powiedzieć ci w czasie wykonywania, czy to zadziała. Np

WebApp.Start<string>(BaseAddress); 

to kompiluje ale generuje EntryPointNotFoundException czasie wykonywania (metoda nie „Konfiguracja” stwierdzono w klasie „system.string).

Nie, aby uzyskać wszystkie filozoficzne, ale widzę to jako ogólny trend w dzisiejszym informatyka. REST, z tym, że nie ma żadnych kontraktów, nie ma gwarancji, wyznajesz, że jest w nim jakiś paradygmat; SOAP nie działa. Pod pewnymi względami jest to dobre, ale nie sądzę, aby ten przykład był jednym z nich.

+0

Dzięki za odpowiedź i przepraszam za opóźnioną odpowiedź. –

+0

Pozwala to na rozszerzenie OWIN w przyszłości bez naruszania istniejącego kodu. Jedynym sposobem, aby to zrobić za pomocą interfejsów, jest ich wersja, która ma również zalety i wady. – bikeman868