2015-01-10 6 views
1

Я стараюсь следовать примеру. В нем говорится о внедрении интерфейса IController (из пространства имен System.Web.Mvc). Интерфейс выглядит следующим образом:Создание контроллера с IController?

public interface IController { 
void Execute(RequestContext requestContext); 
} 

проект, кажется, использует этот интерфейс (файл контроллер использует его), но я не знаю, куда он идет? Если я положил его вместе с другим файлом контроллера он не работает .... пожалуйста, сообщите

здесь является контроллер, который использует интерфейс

using System.Web.Mvc; 
using System.Web.Routing; 

namespace ControllersAndActions.Controllers 
{ 
    public class BasicController : Controller 
    { 
     // GET: Basic 
     public void Execute(RequestContext requestContext) 
     { 
      string controller = (string)requestContext.RouteData.Values["controller"]; 
      string action = (string)requestContext.RouteData.Values["action"]; 

      if (action.ToLower() == "redirect") 
      { 
       requestContext.HttpContext.Response.Redirect("/Derived/Index"); 
      } 

      else 
      { 
       requestContext.HttpContext.Response.Write(
        string.Format("Controller: {0}, Action: {1}", 
        controller, action)); 
      } 

     // requestContext.HttpContext.Response.Write(
     //  string.Format("Controller: {0}, Action: {1}", controller, action)); 
     } 


    } 
} 
+1

Что вы пытаетесь достичь? 'IController' будет реализован' ControllerBase', 'ControllerBase' будет реализован' Controller', и, наконец, 'Controller' будет реализован любым из наших пользовательских контроллеров в ASP.Net MVC. – ramiramilu

+0

Возможно, он уже использует его, и я забыл представление или что-то в этом роде ... интерфейс только что приведен в примере, и я не знаю, как он подходит в – Aindriu

ответ

2

Вот контроллер пример реализации непосредственно интерфейс:

public class HomeController : IController 
{ 
    public void Execute(RequestContext requestContext) 
    { 
     var response = requestContext.HttpContext.Response; 
     response.ContentType = "text/plain"; 
     response.Write("Hello World"); 
    } 
} 

Теперь, когда вы переходите на /Home, этот контроллер будет выполнен.

С другой стороны, класс ControllerBase уже реализует этот интерфейс для вас и предоставляет вам гораздо больше утилит. Обычно вы получаете непосредственно из класса Controller (который наследует ControllerBase), так что у вас есть такие вещи, как привязка модели от запроса, просмотр поддержки двигателя, действия, ...

+0

, когда я перехожу к базовому/индексу, я получаю. Ресурс не найден. , но я создал другой контроллер и мог перейти к производному/индексу. – Aindriu

+0

Обычно, если вы непосредственно реализуете интерфейс IController, нет никакой концепции действий. Поэтому вы должны перейти к '/ Home', чтобы этот контроллер выполнялся. Если вы наследуете свой класс от 'Controller', вы можете определить различные действия внутри. –

+0

ОК. я думаю, что он не нужен интерфейс – Aindriu

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