Ho un'applicazione Web che dovrebbe essere composta come una serie di plugin in un'infrastruttura principale. Un plugin è una dll CLR compilata + alcuni file di contenuto che verranno inseriti in una determinata posizione. Sto usando Autofac per scansionare e registrare i tipi fuori dall'assemblaggio, e qualche routing elaborato per servire controllori e risorse da lì. Ma dato che ogni assembly di plugin può contenere un DbContext (per convenzione ognuno utilizzerà il proprio database), non riesco a capire bene cosa fare lì.EF multi-contesto con un sistema in stile plugin. Come applicare le migrazioni in fase di runtime?
Ora ho trovato molte cose su come utilizzare più contesti, ma tutto ciò richiede di sapere quali saranno questi in fase di sviluppo. La mia applicazione non sa quali contesti saranno usati fino al runtime.
Quello che sto cercando gode di un'ottima vorrei è un modo di fare
ApplyMigrations<MyDbContext, MyDbConfiguration>();
Anche se vorrei anche avere qualche modo per fornire un insieme ordinato di migrazioni da applicare (se si utilizza migrazioni espliciti).
dove sto inciampando è attualmente lo standard
Database.SetInitializer(...)
in quanto si tratta di un Singleton statica e ogni DbContext nel mio sistema ha la propria inizializzazione.
Avete pensato di caricare ogni plugin in un dominio di applicazione separata? Probabilmente ha senso per te farlo comunque ed è probabile che tu possa aggirare questo. –
@LukeMcGregor ma questa è un'applicazione Web e IIS gestisce domini app, quindi come gestirlo? –
Non penso che ci sia alcun problema nel creare domini app in un'app web, un progetto su cui ho lavorato di recente aveva un sistema di plugin che usava domini app. Li abbiamo utilizzati in webapp e servizi senza problemi. –