Molte di queste risposte suggeriscono l'uso del pattern Singleton o l'uso di statiche, ma non sono d'accordo. Sì, questo porterà a termine il lavoro, ma IMHO, è una cattiva pratica. È più difficile testare e isolare il codice che utilizza il codice Singleton / statico, quindi non è l'ideale. Userei il pattern Inversion of Control / In Dependency Injection. Fondamentalmente funziona così ( Nota che provengo da uno sfondo Java ):
class INeedOneInstanceOfAClass {
OneInstanceOfAClass oneInstanceOfAClass;
public void setOneInstanceOfAClass(OneInstanceOfAClass oneInstanceOfAClass) {
this.oneInstanceOfAClass = oneInstanceOfAClass;
}
// ...
}
Qualche altro codice è responsabile per chiamare quel setter. Il codice che chiama il setter si assicura che crei solo un'istanza di OneInstanceOfAClass e passi la stessa istanza in tutte le altre classi che hai con un metodo setOneInstanceOfAClass. Di conseguenza, esiste una sola istanza di OneInstanceOfAClass ma, OneInstanceOfAClass non è un Singleton e non è necessario utilizzare statico in alcun luogo. È solo una lezione normale che ti istanzia solo una volta.
Ora è davvero facile isolare INeedOneInstanceOfAClass in un test unitario. Il tuo test unitario crea INeedOneInstanceOfAClass e passa in un falso OneInstanceOfAClass che fa tutto ciò che deve fare per uscire dal test dell'unità.