Quería evitar la instrucción de cambio. Tengo más de 30 tipos de documentos. También existe la posibilidad de que necesite agregar más tipos de documento en el futuro. Prefiero pasar IDocument y tener el tipo especificado en la implementación de IDocument. Otra cosa que olvidé mencionar fue ProgressNoteViewModel, LabViewModel ... todos heredan de WorkspaceViewModel y todos los constructores de implementación concretos toman un tipo IPatient como parámetro. También estoy usando Castillo como mi contenedor IoC¿Cómo reemplazo una declaración de interruptor con IOC para poder mantener el principio SOLIDO
me quiera refactorizar el código para algo así como
viewModel = new TreeViewModel(repository.GetPatientDocumentListing(IDocumentType);
this.DocTreeViewModel = viewModel;
//How would I then be able to instantiate the right ViewModel
//based on IDocumentType and also pass a object into the
//constructor that is not know at compile time
Tengo el siguiente código:
switch (docType)
{
case "ProgressNotes":
viewModel = new TreeViewModel(repository.GetPatientProgressNotes());
this.DocTreeViewModel = viewModel;
ProgressNoteViewModel workspace = ProgressNoteViewModel.NewProgressNoteViewModel(_patient);
break;
case "Labs":
viewModel = new TreeViewModel(repository.GetPatientLabs());
this.DocTreeViewModel = viewModel;
LabViewModel workspace = LabViewModel.NewLabViewModel(_patient);
break;
}
this.Workspaces.Add(workspace);
this.SetActiveWorkspace(workspace);
Lo contenedor IoC está usando? – smaclell