2012-11-27 15 views
9

nell'applicazione WebApi ASP.Net MVC 4 Voglio caricare altri WebApiControllers dinamicamente in un secondo momento (dopo l'inizializzazione WebApi), che si trovano in assembly separati. Inoltre voglio aggiungere percorsi per quei controller in fase di runtime.ASP.Net WebApi: come caricare controller aggiuntivi in ​​fase di esecuzione

Mi chiedo, se è possibile farlo.

Il mio obiettivo è creare una web-app, in cui posso caricare i controller (assembly compilati) ei controller verranno automaticamente ospitati all'interno di questa applicazione.

ho già provato a raggiungere questo implementando mia classe AssemblyResolver, ma (per quanto ho visto), l'AssemblyResolver viene caricato una volta in fase di inizializzazione.

Potrebbe esserci un'opzione per "ricaricare" tutti i controller.

Qualsiasi aiuto sarà apprezzato!

Marius

+0

http://www.dotnetcurry.com/ShowArticle.aspx?ID=898 hai visto questo. –

+0

Un mio ex collega ha qualcosa di quasi identico a questo che funziona nel nostro sistema. So che ha finito per usare [MEF] (http://msdn.microsoft.com/en-us/library/dd460648.aspx) per gestire il caricamento dinamico degli assiemi, ma non ricordo le specifiche. Gli ho mandato un link a questo post, forse tornerà da te. Nel frattempo, puoi provare a trovare una soluzione tu stesso con MEF. – gzak

risposta

2

Si potrebbe utilizzare Web API Dipendenza Resolver:

public class WebApiApplication : System.Web.HttpApplication 
{ 
    void ConfigureApi(HttpConfiguration config) 
    { 
     config.DependencyResolver = new MyDependencyResolver(); 
    } 

    protected void Application_Start() 
    { 
     ConfigureApi(GlobalConfiguration.Configuration); 

     // ... 
    } 
} 

Using the Web API Dependency Resolver

2

Grazie per le vostre risposte.

L'ho capito, non è possibile farlo, poiché tutti i controller sono caricati una volta e sono memorizzati nella cache per tutto il tempo.

Vedere HttpControllerTypeCache nel metodo DefaultHttpControllerSelector InitializeControllerInfoCache (...).

In caso di aggiornamento della cache dei tipi, devo implementare un HttpControllerSelector personalizzato.

0

Che dire se in Global.asax è stata caricata tutti gli assembly in una cartella specifica e poi cercato una classe che implementa un'interfaccia specifica, ad esempio

RegisterControllers vuoto (percorsi RouteCollection);

Creare un'istanza e quindi passare la raccolta del percorso. Ciò quindi registrerebbe i percorsi aggiuntivi durante l'avvio del sito Web.

+0

Ciao Peter, voglio caricare in modo dinamico altri controller WebAPi in un secondo momento (quando il sito Web è già in esecuzione). So come caricare i controller in global.asax, ma questo accade solo una volta: all'avvio. – Marius

+0

IIS non riavvia comunque l'applicazione Web quando si modifica il contenuto della cartella dei file binari? –

Problemi correlati