Sto cercando di ottenere Unity per gestire la creazione dei miei oggetti e voglio avere alcuni parametri di inizializzazione che non sono noti fino al runtime:
Al momento l'unico modo in cui ho potuto pensare al modo di farlo è avere un metodo Init sull'interfaccia.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Quindi per usarlo (in Unity) farei questo:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
In questo scenario, il runTimeParam
parametro viene determinato in fase di esecuzione in base all'input dell'utente. Il banale caso qui restituisce semplicemente il valore di runTimeParam
ma in realtà il parametro sarà qualcosa come il nome del file e il metodo di inizializzazione farà qualcosa con il file.
Ciò crea una serie di problemi, vale a dire che il Initialize
metodo è disponibile sull'interfaccia e può essere chiamato più volte. Impostare un flag nell'implementazione e lanciare un'eccezione su una chiamata ripetuta Initialize
sembra molto goffo.
Nel momento in cui risolvo la mia interfaccia, non voglio sapere nulla sull'implementazione di IMyIntf
. Quello che voglio, tuttavia, è la conoscenza che questa interfaccia necessita di determinati parametri di inizializzazione una volta. C'è un modo per annotare in qualche modo (attributi?) L'interfaccia con queste informazioni e passarle al framework quando viene creato l'oggetto?
Modifica: ha descritto l'interfaccia un po 'di più.
runTimeParam
è una dipendenza determinata in fase di esecuzione in base a un input dell'utente. L'alternativa dovrebbe essere quella di suddividerla in due interfacce: una per l'inizializzazione e l'altra per la memorizzazione dei valori?