Io uso il Castello di Windsor già da un po 'di tempo. È perfetto per gli ambienti in cui i dati si trovano in un database o simili, dove il modello di repository o il modello unitofwork funzionano bene.Castello di Windsor/DI e modelli di oggetti
Ora ho una situazione diversa: ho un modello di oggetto complesso che è assemblato da molti PONO singoli. L'ambiente è fortemente influenzato dalla COM, per renderlo più esplicito: Excel, i PIO di Word sono molto utilizzati.
Io uso lo schema di comando, ho implementato ICommandHandler come descritto here ma con una differenza. Poiché desidero assemblare i comandi a un elenco di comandi per chiamarli in una corsa senza conoscere nulla, oltre allo schema di comando generale descritto, non introduce il contesto quando chiama il metodo execute. Quindi l'interfaccia è simile a questa:
public interface ICommand
{
void Execute();
bool CanExecute();
}
L'esecuzione di comandi con tale interfaccia è efficace e di facile comprensione. D'altra parte è un problema introdurre il contesto con il ctor perché, pertanto, il contenitore deve essere chiamato esplicitamente ad es. aggiungi i parametri del ctor.
Così io in realtà sono due domande:
- E 'possibile iniettare un - chiamiamolo un contesto, una parte del modello di oggetti - automaticamente dal castello di Windsor senza chiamare il contenitore explictely?
- Come partecipare dal modello di comando utilizzando DI? Qualche idea su come realizzare la capacità di definire un elenco di attività/azioni o simili seguendo la regola RRR descritta here?
Si collega a una descrizione del modello di comando/gestore (utilizzando 'ICommandHandler'), ma in realtà si utilizza il modello di comando, che è completamente diverso, poiché i comandi nel modello di comando/gestore sono DTO senza comportamento, e non contengono il metodo 'Esegui'. Avere un metodo 'Execute' su di essi disabilita la maggior parte delle funzionalità che il pattern command/handler porta. I problemi relativi all'iniezione delle dipendenze nei comandi spariranno quando si iniettano le dipendenze nei gestori. Nel modello command/handler, i comandi non hanno alcuna dipendenza (perché non hanno alcun comportamento). –
Steven
Grazie per la risposta, Steven. Hai certamente ragione, posso iniettarli nel conduttore. Ma questo non risolve il problema, perché devo ancora iniettare le stesse informazioni e chiamare il contenitore per rendere i miei dati disponibili al gestore. Non sarebbe possibile eseguire comandi batch ed eseguirli in fila. Ho sbagliato qualcosa? –