У меня есть несколько проектов в моем решении MVC. В моем веб-проекте 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
}
}
}
Могу ли я выбрать соответствующий класс класса «Сервис» динамически? Переменная imageClassName содержит имя класса сервиса Image.
factory.imageClassName.DeleteImage(name, id);
Есть ли способ использовать строковую переменную для замены имени класса?
'Отражение' может это сделать, но оно медленное и сложное. Я предлагаю вам использовать оператор switch. – opewix
@JesseJames спасибо за быстрый ответ. Да, я видел несколько ответов и сообщений с помощью Reflection. http://stackoverflow.com/questions/1044455/c-sharp-reflection-how-to-get-class-reference-from-string Хотя мне нужно писать больше кодов, лучше использовать оператор switch, если есть нет другого лучшего решения. – user3627847