2013-03-17 40 views
1

感謝您的幫助!我的解決方案已更新爲正確的答案。MVC3訪問控制器中的存儲庫

我有一個關於如何訪問我的控制器的存儲庫的簡單問題。如果你看看我的addMovie方法,我想在控制器繼承IMovieRepository之後,我可以在ModelState.IsValid中執行movies.AddMovie(movie)。

IMovieRepository:

public interface IMovieRepository : IDisposable 
{ 
    IEnumerable<Movies> GetMovies(); 
    Movies GetMovieByID(int id); 
    void AddMovie(Movies movie); 
    void UpdateMovie(Movies movie); 
    void DeleteMovie(int id); 
    void save(Movies movie); 
} 

MovieRepository:

public class MovieRepository : BaseRepository, IMovieRepository 
{ 
    private MovieContext db; 

    public MovieRepository(MovieContext repo) 
    { 
     db = repo; 
    } 

    public IEnumerable<Movies> GetMovies() 
    { 
     return db.Movies.ToList(); 
    } 

    public Movies GetMovieByID(int id) 
    { 
     return db.Movies.Find(id); 
    } 

    public void AddMovie(Movies movie) 
    { 
     db.Movies.Add(movie); 
    } 

    public void UpdateMovie(Movies movie) 
    { 
     db.Entry(movie).State = EntityState.Modified; 
    } 

    public void DeleteMovie(int id) 
    { 
     Movies movie = db.Movies.Find(id); 
     db.Movies.Remove(movie); 
    } 

    public void save(Movies movie) 
    { 
     if (movie.movieID == 0) 
      db.Movies.Add(movie); 
     else 
      db.Entry<Movies>(movie).State = System.Data.EntityState.Modified; 

     db.SaveChanges(); 
    } 
} 

NinjectDependencyResolve:

Bind<IMovieRepository>().To<MovieRepository>(); 

MoviesController:

public class MoviesController : Controller 
{ 
    private IMovieRepository movieRepository; 

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

    public MoviesController(IMovieRepository movieRepository) 
    { 
     this.movieRepository = movieRepository; 
    } 
    #region "GET" 
    // 
    // GET: /Admin/Movies/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 
    #endregion 

    #region "POST" 
    [HttpPost] 
    public ActionResult addMovie(Movies movie) 
    { 
     if (ModelState.IsValid) 
     { 
      movieRepository.AddMovie(movie); 
      movieRepository.save(movie); 
      return RedirectToAction("index", "movies"); 
     } 
     return View(movie); 
    } 
    #endregion 
} 

}

+1

你應該你的問題不會改變對你的解決方案。這不允許其他人從問題/答案中受益。如果你想包括答案,那麼把它添加到你的問題的最後。 – 2013-03-17 19:12:44

回答

1

你需要添加構造控制器:

private IMovieRepository _Repository; 

[Inject] 
public MovieController(IMovieRepository repository) 
{ 
    _Repository = repository; 
} 
+0

謝謝,修好了! [Inject]做什麼? – Andrew 2013-03-17 18:35:39

+0

由於您使用的是Ninject,因此您需要該屬性,以便Ninject知道發生依賴注入的位置。否則,你會得到一個錯誤,說你需要一個無參數的構造函數。 – 2013-03-17 18:36:49

+0

謝謝!我會在2分鐘內接受這個答案。 – Andrew 2013-03-17 18:40:55

0
private IMovieRepository _repository; 

public MoviesController(IMovieRepository repository) 
{ 
    _repository =repository; 
} 

使用構造函數注入