2014-12-19 40 views
0

我在我的MVC解决方案中有多个项目。在我的web项目中,ImageController为我的项目中的所有Image类提供了更新,删除和创建方法。目前,我正在使用切换选项访问服务层(另一个类库项目)中的相关服务。基于变量值动态选择服务类

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 2014-12-19 04:53:31

+0

@JesseJames 感谢您的快速回复。是的,我使用Reflection时看到了很少的答案和帖子。 http://stackoverflow.com/questions/1044455/c-sharp-reflection-how-to-get-class-reference-from-string 虽然我不得不编写更多的代码,但最好使用switch语句,如果有没有其他更好的解 – user3627847 2014-12-19 05:09:39

回答

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);