2014-12-19 4 views
0

내 MVC 솔루션에 여러 프로젝트가 있습니다. 내 웹 프로젝트의 ImageController에는 프로젝트의 모든 이미지 클래스에 대한 업데이트, 삭제 및 메서드가 있습니다. 현재 서비스 옵션 (다른 클래스 라이브러리 프로젝트)에서 관련 서비스에 액세스하기 위해 스위치 옵션을 사용하고 있습니다.변수 값을 기준으로 동적으로 서비스 클래스를 선택하십시오.

namespace MySolution.Web.Controllers 
{ 
    public class ImageController : Controller 
    { 
     public void UpdateMainImage(string imageClassName, string name, long id) 
     { 
      using (ServiceFactory factory = new ServiceFactory()) 
      { 
       switch (imageClassName) 
       { 
        case "CategoryImage": factory.CategoryImage.UpdateDisplayImage(name, id); 
         break; 
        case "ItemImage": factory.ItemImage..UpdateDisplayImage(name, id)); 
         break; 
        //other case statements             
       } 
     } 

// Delete Image Method 
public void DeleteImage(string imageClassName, long id) 
     { 
      using (ServiceFactory factory = new ServiceFactory()) 
      { 
       switch (imageClassName) 
       { 
        case "CategoryImage": factory.CategoryImage.DeleteImage(id); 
         break; 
        case "ItemImage": factory.ItemImage..DeleteImage(id)); 
         break; 
        //other case statements             
       } 
     } 
    } 

관련 Imageservice 클래스를 동적으로 선택할 수 있습니까? imageClassName 변수에는 Image 서비스 클래스 이름이 포함됩니다.

factory.imageClassName.DeleteImage(name, id); 

클래스 이름을 바꾸기 위해 문자열 변수를 사용하는 방법이 있습니까?

+0

'반사'는이를 수행 할 수 있지만 느리고 복잡합니다. switch 문을 사용하는 것이 좋습니다. – opewix

+0

@JesseJames 빠른 답장을 보내 주셔서 감사합니다. 네, Reflection을 사용하여 몇 개의 답변과 게시물을 보았습니다. http://stackoverflow.com/questions/1044455/c-sharp-reflection-how-to-get-class-reference-from-string 더 많은 코드를 작성해야하지만 switch 문을 사용하는 것이 더 좋습니다 다른 더 나은 해결책은 없습니다. – user3627847

답변

0

클래스 (CategoryImage, ItemImage 등)가 단일 인터페이스 또는 추상 클래스에서 상속 받았습니까?

이 경우 Dictionary<string, ImageService을 사용할 수 있습니다. 여기서 ImageService은 기본 클래스 또는 인터페이스입니다.

private static IDictionary<string, ImageService> imageServices = new Dictionary<string, ImageService> 
{ 
    { "CreateImage", new CreateImage() }, 
    { "ItemImage", new ItemImage() }, 
}; 

// somewhere below: 
imageServices[imageClassName].UpdateDisplayImage(name, id); 
관련 문제