Come nascondere le dipendenze di una dll dal codice chiamandolo?

1

Ho una libreria di classi che chiama dll_A .

dll_A ha dipendenze da WPF.

Come posso avvolgere o isolare la mia libreria di classi in modo che il codice che chiama la mia libreria non debba avere una dipendenza da WPF?

(La mia libreria di classi deve ovviamente dipendere da WPF, ma l'unico output è Byte[] ).

In altre parole, voglio che la mia libreria agisca come un processo completamente diverso, come una sorta di 'buffer', e il codice chiamante non si preoccupa di come funziona, solo che emette Byte[] .

    
posta DefenestrationDay 13.01.2018 - 11:04
fonte

2 risposte

6

Per ottenere questo livello di isolamento, probabilmente non hai bisogno di un processo separato. Un "AppDomain" separato sarà probabilmente sufficiente.

Per questo, sia che il codice chiamante non si colleghi alla tua lib, o che la tua libreria non si colleghi direttamente contro dll_A . Al contrario, caricare le librerie dipendenti di WPF in fase di esecuzione in un AppDomain separato e utilizzare il meccanismo di riflessione di framework .Net per chiamare i metodi della libreria, come mostrato in questo vecchio post SO , o questa pagina Microsoft .

Se vuoi veramente l'isolamento a livello di processo, devi mettere il codice della tua libreria di classi che è collegato a dll_A in un programma wrapper separato (magari uno strumento da linea di comando), implementare un qualche tipo di comunicazione tra processi ( IPC) e fornire una libreria di seconda classe in grado di comunicare con il programma wrapper e fornisce un'API per il codice chiamante. Ma attenzione, IPC aggiunge sempre un sovraccarico, questo ha sempre un impatto sulle prestazioni e sullo sforzo di programmazione richiesto.

    
risposta data 13.01.2018 - 11:31
fonte
0

Devi separare il codice in diverse DLL. Cioè, crea Adll che offre la funzione che hai descritto sopra ( Afunction che si spera non dipenda da WPF). Crea un altro dll Bdll con la funzionalità che richiede WPF; potrebbe avere una dipendenza su Adll .

Questa strategia non funzionerà se Afunction richiede funzionalità WPF.

Ho affrontato un problema simile quando ho aggiunto un po 'di "logica aziendale" più un UserControl di Windows Form in una dll, quindi ho provato a utilizzare la logica di business (che non dipendeva affatto da UserControl) in Asp.Net.

    
risposta data 15.01.2018 - 10:17
fonte

Leggi altre domande sui tag