ASP.Net MVC, Ninject IOC - PullRequest
       2

ASP.Net MVC, Ninject IOC

0 голосов
/ 24 июня 2010

Я использую Ninject, чтобы сделать инъекцию зависимости.(Главным образом для DAL), мой проект состоит из 3-х аспектов:

  1. Project.Lib (Все базы данных, сервисы и все остальное, что является логикой)
  2. Project.Admin (Администрирование)
  3. Project.Web (интерфейс пользователя, который видит пользователь)

Теперь каждый из моих контроллеров в моих проектах наследуется от BaseController

 public abstract class BaseController : Controller
    {
        protected BaseController(ISession session)
        {
            _Session = session;
        }

        public ISession _Session { get; private set; }
    }

И тогда и пример контроллера может быть таким,

 public class ImageController : BaseController
    {
        private MediaService _mediaService;

        public ImageController(ISession session) : base(session)
        {
            _mediaService = new MediaService(session);
        }

        [HttpGet]
        public ActionResult List()
        {   
            var RetVal = _mediaService.GetAllImages();
            return View(RetVal);
        }
}

Как вы можете видеть, "Сеанс" передается от контроллера на уровень обслуживания.Мне любопытно, если это хорошая практика?Любые негативы к тому, что мы здесь делаем?

1 Ответ

2 голосов
/ 24 июня 2010

Я бы не стал ссылаться на ISession через ваш контроллер. Лучшим решением было бы использовать Ninject для внедрения ваших сервисов в ваши контроллеры. В этом случае вам нужно создать абстракцию для вашего MediaService класса, например ::100100

public interface IMediaService 
{
    SomeCollection GetAllImages();
    // ...
}

Затем вы использовали бы Ninject для предоставления реализации вышеуказанного интерфейса вашему контроллеру:

public class ImageController : BaseController
{
    private IMediaService _mediaService;

    public ImageController(IMediaService mediaService)
    {
        _mediaService = mediaService
    }

    [HttpGet]
    public ActionResult List()
    {   
        var RetVal = _mediaService.GetAllImages();
        return View(RetVal);
    }

}

...