Ho una .net-app che fornisce un meccanismo per estendere l'app con i plugin. Ogni plugin deve implementare un'interfaccia plugin e deve inoltre fornire un costruttore che riceve un parametro (un contesto di risorse).Un'interfaccia può definire la firma di un C# -costruttore
Durante l'istanziazione della classe plug-in, guardo tramite riflessione, se esiste il costruttore necessario e se sì, istanziato la classe (tramite Reflection). Se il costruttore non esiste, faccio un'eccezione che dice che il plugin non può essere creato, perché il costruttore desiderato non è disponibile.
La mia domanda è, se c'è un modo per dichiarare la firma di un costruttore nell'interfaccia plugin in modo che tutti coloro che implementano l'interfaccia plugin debbano anche fornire un costruttore con la firma desiderata. Ciò faciliterebbe la creazione di plugin.
Non credo che una tale possibilità esiste perché penso che una tale caratteristica non cade nel scopo principale per quello che le interfacce sono stati progettati per, ma forse qualcuno conosce una dichiarazione che fa questo, qualcosa di simile:
public interface IPlugin {
ctor(IResourceContext resourceContext);
int AnotherPluginFunction();
}
Voglio aggiungere che non voglio cambiare il costruttore per essere senza parametri e quindi impostare il contesto delle risorse attraverso una proprietà, perché questo renderà la creazione di plugin molto più complicata. Le persone che scrivono plugin non sono persone con esperienza di programmazione profonda. I plugin sono utilizzati per calcolare i dati statistici che verranno visualizzati dall'app.
Grazie per tutte le risposte.
Ho deciso, che ho lasciato un'interfaccia perché non mi piace forzare i programmatori di plugin ad ereditare da una classe astratta in modo che lui o lei perda la possibilità di ereditare da una propria classe base . Inoltre, derivare da una classe astratta non garantisce che il programmatore di plugin fornisca realmente il costruttore necessario. Lo rende solo più probabile (il programmatore ha ancora la possibilità di aggiungere solo un costruttore che contiene il parametro desiderato ma che ha anche parametri aggiuntivi, e anche questo è negativo. Vedi i commenti alla risposta di Ken Browning).
Anche se nel mio post ho detto che non voglio una tale proprietà, ho contrassegnato la risposta di Danny Varod come accettata perché penso che nella mia situazione sia la soluzione più appropriata. Grazie a tutti coloro che hanno risposto.
+1 per l'utilizzo di una proprietà. –