ciao,
vailfox ha scritto:
Il problema è che la property TypeName dell'ODS non può essere impostata facendo riferimento al membro statico della mia classe RepositoryFactory
Già, si aspetta il nome di un tipo di cui deve poter creare un'istanza. Un factory method non gli va bene.
vailfox ha scritto:
è possibile procedere in tal senso e usare vantaggi dell'ODS in questi contesti???
Certo. Banalmente, ti puoi creare una classe proxy in cui definisci dei metodi con firme idonee alle esigenze dell'ObjectDataSource. Nel corpo di questi metodi andrai ad ottenere un riferimento al repository e ad interagire con esso. Questo potrebbe essere l'ipotetico metodo di selezione con paginazione:
public IList<UsedCar> Seleziona(int maximumRows, int startRowIndex){
IUsedCarRepository usedCarRepository = RepositoryFactory.UsedCar();
return usedCarRepository.GetAll().Skip(startRowIndex).Take(maximumRows);
}
Vedi, è richiesto un po' di
plumbing ma alla fine della giornata sarà probabilmente la soluzione che ti avrà fatto impazzire di meno per adattare il tuo repository all'ObjectDataSource.
Non c'è dubbio che esistano anche altre soluzioni. Ad esempio, come hai detto tu stesso, potresti gestire l'evento ObjectCreating, recuperare il TypeName (che è una stringa) e fare qualche magheggio con la reflection per ottenere tu stesso l'istanza del repository.
Qui affrontano questo approccio usando un container IoC per farsi dare l'istanza:
http://www.graytechnology.com/Blog/post/Using-Dependency-Injection-with-an-ObjectDataSource.aspxSecondo me però questo esempio non è completo perché il tipo non lo ottengono dinamicamente dalla proprietà TypeName, ma è semplicemente hard-coded nel corpo del metodo. Bleh... non un pezzo di codice che vorresti mettere in produzione, specie se hai tanti ObjectDataSource in giro per l'applicazione e hai bisogno che quella logica sia incapsulata una volta per tutte in un controllo personalizzato.
ciao
Modificato da BrightSoul il 07 maggio 2012 22.55 -