2016-09-30 1 views
1

私はリポジトリにムービーのリストを含むStartControllerを持っています。私はStartControllerだけでなく、GenreControllerでもこのリストを使いたいと思いますが、どうしたらいいか分かりません。 これは私のStartControllerです:Inherit、Repository、MVC

namespace IMDB 
{ 
    public class StartController : Controller 
    { 
     // GET: Start 
     public ActionResult Index() 
     { 

      var movies = GetMoviesFromRepository(); 

      return View(movies); 
     } 
     // GET: Details 

     public ActionResult Movie(int id) 
     { 
      var allMovies = GetMoviesFromRepository(); 
      var movie = allMovies.FirstOrDefault(x => x.MovieID.Equals(id)); 

      return View(movie); 
     } 

     private List<Movie> GetMoviesFromRepository() 
     { 

      var movies = new List<Movie>(); 

      var movie1 = new Movie(); 
      movie1.MovieID = 1; 
      movie1.Title = "Terminator"; 
      movie1.Genre = "Comedy"; 
      movie1.Year = 1984; 
      movie1.Country = "America"; 
      movie1.Picture = "http://vignette4.wikia.nocookie.net/tvdatabase/images/8/89/Terminator_(1984).jpg"; 
      movies.Add(movie1); 

      var movie2 = new Movie(); 
      movie2.MovieID = 2; 
      movie2.Title = "Terminator 2: Judgement Day"; 
      movie2.Genre = "Romantic"; 
      movie2.Year = 1991; 
      movie2.Country = "America"; 
      movie2.Picture = "https://upload.wikimedia.org/wikipedia/en/8/85/Terminator2poster.jpg"; 
      movies.Add(movie2); 

      return movies; 
     } 
    } 
}  

そして、これは私がStartControllerからリストにアクセスするGenreControllerです:

namespace IMDB.Controllers 
{ 
    public class GenreController : Controller 
    { 
     // GET: Genre 
     public ActionResult Genre(string genre) 
     { 
      var allGenres = GetMoviesFromRepository(); 
      // Some code goes here 

      return View(); 
     } 
    } 
} 

明らかにこれは動作しません。しかし、私のリストをGenreControllerで動作させる方法を理解することはできません。

+1

「GetMoviesFromRepository」を別々に作成して両方のコントローラから使用するのが最も理にかなっています。 –

+0

さて、わかりました。私は実際にそれをどうやってしますか?そして、両方のコントローラーからどのように使用すればよいですか? (ここではnewbの総数) – Koalemos

+1

ごめんなさい、実行中です。新しいクラスライブラリを追加してそこにクラスを追加し、そのクラスの 'GetMoviesFromRepository'を追加することができます。 –

答えて

2

これは、本部が話しているものです。

あなたのコントローラから出て、独自のクラスに映画リポジトリロジックを抽出します。あなたのムービーを取得するのが目的です。

public class MovieRepository { 
     public List<Movie> GetMoviesFromRepository() 
     { 
      var movies = new List<Movie>(); 

      var movie1 = new Movie(); 
      movie1.MovieID = 1; 
      movie1.Title = "Terminator"; 
      movie1.Genre = "Comedy"; 
      movie1.Year = 1984; 
      movie1.Country = "America"; 
      movie1.Picture = "http://vignette4.wikia.nocookie.net/tvdatabase/images/8/89/Terminator_(1984).jpg"; 
      movies.Add(movie1); 

      var movie2 = new Movie(); 
      movie2.MovieID = 2; 
      movie2.Title = "Terminator 2: Judgement Day"; 
      movie2.Genre = "Romantic"; 
      movie2.Year = 1991; 
      movie2.Country = "America"; 
      movie2.Picture = "https://upload.wikimedia.org/wikipedia/en/8/85/Terminator2poster.jpg"; 
      movies.Add(movie2); 

      return movies; 
     } 
    } 

コントローラで、MovieRepositoryを保持するプライベート変数を初期化するコンストラクタを追加します。その後、ムービーコレクションを取得する場所はどこでも、movieRepository.GetMoviesFromRepository()を呼び出すだけです。

 public class StartController : Controller { 
      private readonly MovieRepository movieRepository; 

      public StartController() 
      { 
       this.movieRepository = new MovieRepository(); 
      } 

      // GET: Start 
      public ActionResult Index() 
      { 
       var movies = movieRepository.GetMoviesFromRepository(); 

       return View(movies); 
      } 
      // GET: Details 

      public ActionResult Movie(int id) 
      { 
       var allMovies = movieRepository.GetMoviesFromRepository(); 
       var movie = allMovies.FirstOrDefault(x => x.MovieID.Equals(id)); 

       return View(movie); 
      } 

     } 
+2

はい、正確です。ダーリーに感謝、私は忙しかった。 –

+0

これはとても感謝しています。あなたの両方 – Koalemos