Ich wollte die switch-Anweisung vermeiden. Ich habe über 30 Dokumenttypen. Es besteht auch die Möglichkeit, dass ich weitere Dokumenttypen hinzufügen muss. Ich würde lieber IDocument übergeben und den in der Implementierung von IDocument angegebenen Typ haben. Etwas anderes, das ich vergessen habe zu erwähnen, war ProgressNoteViewModel, LabViewModel ... alle erben von WorkspaceViewModel und alle konkreten Implementierungskonstruktoren nehmen einen Typ IPatient als Parameter. Ich bin auch mit Schloss als mein IoC ContainerWie ersetze ich eine Schaltanweisung mit IOC, damit ich das SOLID-Prinzip beibehalten kann
Ich möchte den Code so etwas wie
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
ich den folgenden Code haben Refactoring:
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);
Welche IoC-Container verwenden Sie? – smaclell