2012-04-27 3 views
4

В MVC, например, у меня есть 5 разных файлов контроллера. Во всех них у меня есть способ сохранения изображения. Есть ли способ разместить этот метод на одном месте и каждый метод контроллера для доступа к нему вместо того, чтобы писать его в каждом контроллере? Я попыталсяОдин метод, доступный для всех контроллеров - куда его поставить?

MyController.MyMethod(); 

Но Intellisence не показывает его после того, как я пишу точку.

ответ

9

Положите его в служебный класс и сделать его статическим. Из контроллеров все, что вам нужно сделать, это что-то вроде:

Utility.SaveImage(...); 
+0

Лучшее соблюдение SRP, чем использование базового контроллера +1 –

+0

@Icarus Но где я могу поместить этот класс Utility? В папке «Содержание»? –

+0

@Srcee Я бы поместил его в отдельную папку. Типичные имена: Utils, Common, Core, Shared и т. Д. Я обычно придерживаюсь соглашений Java, если пространство имен классов Shared, тогда я бы поместил его в папку с именем Shared, например. – Icarus

5

Используйте базовый контроллер

public abstract class BaseController : Controller 
{ 
    protected virtual void MyMethod() 
    { 
     // Do stuff 
    } 
} 

Тогда ваши контроллеры наследуют ваш базовый контроллер

public class HomeController : BaseController 
{ 
    public ActionResult Index() 
    { 
     this.MyMethod(); 
     return View(); 
    } 
} 

В качестве альтернативы вы можете создать статический вспомогательный класс

public static class Helper 
{ 
    public static void MyMethod() 
    { 
     // Do stuff 
    } 
} 

public class HomeController 
{ 
    public ActionResult Index() 
    { 
     Helper.MyMethod() 
     return View(); 
    } 
} 
+0

Нет downvote или любой такое ... но думает, что resposibility сохранения изображения будет лучше поместить в классе его собственного, а не базовый контроллер. В соответствии с Icarus ниже –

+2

Согласен, что для сохранения изображения лучшим будет класс-помощник. Я больше фокусировался на том, что он хотел, чтобы метод был доступен каждому контроллеру (и не все). – NinjaNye

Смежные вопросы