बनाए रख सकते हैं मैं स्विच बयान से बचना चाहते थे आईओसी के साथ एक स्विच बयान की जगह है। मेरे पास 30 से अधिक दस्तावेज़ प्रकार हैं। एक संभावना भी है कि मुझे आगे बढ़ने वाले अधिक दस्तावेज़ प्रकार जोड़ने की आवश्यकता होगी। मैं आईडी दस्तावेज़ पास कर दूंगा और आईडी दस्तावेज़ के कार्यान्वयन में निर्दिष्ट प्रकार होगा। कुछ और मैं उल्लेख करना भूल गया ProgressNoteViewModel, LabViewModel ... सभी WorkspaceViewModel से विरासत और ठोस कार्यान्वयन कंस्ट्रक्टर्स के सभी पैरामीटर के रूप में एक प्रकार IPatient ले गया था। मैं अपने आईओसी कंटेनर के रूप में कैसल का उपयोग कर रहामैं कैसे तो मैं ठोस सिद्धांत
मैं की तरह
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
मैं निम्नलिखित कोड है कुछ करने के लिए कोड refactor करने के लिए चाहते हो जाएगा:
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);
क्या आईओसी कंटेनर का उपयोग कर रहे:
संपादित
कैसल विंडसर का उपयोग करके उपरोक्त जवाब की चर्चा करते हुए निम्न कोड नामित घटकों लेकिन कोड में प्रारंभ का उपयोग कर एक ही कर सकता है? – smaclell