2014-10-14 14 views
5

Utilizzando katana, perché il avvio classe non dovrebbe implementare una rispettiva interfaccia, come ad esempio:Perché la classe di avvio richiesta non deve implementare un'interfaccia appropriata, come IStartup?

interface IStartup 
{ 
    void Configuration(IAppBuilder app); 
} 

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

penso che potrebbe essere molto più intuitivo per gli sviluppatori per capire che cosa dovrebbero fornire con il metodo WebApp.Start<T> come argomento T invece di indovinare e alla ricerca di esempi, dovrebbe essere più esplicito:

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

Esiste sempre più di una classe di avvio? Non è il metodo con cui stai implementando lo stesso? –

+0

@RobertHarvey sì, potrebbe essere più di 1 classe di avvio, ad esempio, quando eseguo il test delle unità e ho bisogno di un server fittizio. –

+0

@RobertHarvey Se si esegue il seguente codice 'WebApp.Start ', come è possibile capire quale dovrebbe essere il 'T' richiesto senza consultare documenti ed esempi? –

risposta

4

il motivo è "non c'è nessuna buona ragione". Esistono interfacce per comunicare la struttura e lo scopo a un implementatore (anche le classi astratte lo fanno, oltre a fornire un comportamento minimo). Senza di loro, siamo lasciati con la convenzione. In questo caso, non vincolando TStartup, OWIN ti consente di utilizzare qualsiasi classe di avvio senza senso e può dirti solo in fase di runtime se funzionerà. Per esempio:

WebApp.Start<string>(BaseAddress); 

Questo compila bene, ma genera un EntryPointNotFoundException in fase di esecuzione (metodo n 'Configurazione' stato trovato in classe 'System.String).

Non per ottenere tutto filosofico, ma vedo questo come una tendenza generale nel calcolo di oggi. REST, con i suoi contratti, senza garanzie, capisci che è in atto il paradigma; SOAP è fuori. In un certo senso questa è una buona cosa, ma non penso che questo esempio sia uno di questi.

+0

Grazie per la risposta e mi dispiace per la risposta in ritardo. –

+0

Ciò consente a OWIN di essere esteso in futuro senza rompere il codice esistente. L'unico modo per farlo con le interfacce è la versione che ha anche vantaggi e svantaggi. – bikeman868