MVC.NET + Ninject DI в контроллеры - PullRequest
0 голосов
/ 03 марта 2011

У меня есть несколько приложений MVC.NET в v1, v2 и (скоро) v3.

Во многих приложениях используется шаблон хранилища (дозвуковой), и каждый контроллер внедряет хранилище, как показано ниже;

   public class DefaultController : Controller
    {
        private readonly iRepository repo;
        public DefaultController() : this(new Repository()) { }
        public DefaultController(iRepository repository) { repo = repository; }

        //
        // GET: /Default/
        public ActionResult Index()
        {

            ViewData["HelloWorld"] = repo.GetData("test");



            return View();
        }
    }

Позволит ли Ninject (или simlar) сделать ссылку только один раз (в моем глобальном asax) и как это будет выглядеть?

Существуют ли какие-либо дополнительные преимущества, помимо экономии времени при созданииновые конструкторы?

1 Ответ

4 голосов
/ 03 марта 2011

То, что вы делаете здесь, это инъекция зависимостей «бедняги». Вы говорите, что если вызывающая сторона не предоставляет экземпляр, используйте этот (новый репозиторий). Итак, то, что даст вам контейнер IoC, такой как Ninject (Autofac, Windsor, Structuremap и т. Д.), - это пара вещей.

1) Если вам нужно внести быстрые изменения и изменить реализацию по умолчанию с Repository на MyAwesomeRepository, вы должны сделать это в одном месте, а не на всех разных контроллерах.

2) Вы сможете избавиться от вашего конструктора по умолчанию и иметь только тот, который использует iRepository.

Я думаю, что стоит потратить свое время на изучение использования контейнера IoC, а не на выполнение вышеуказанного.


Итак, это будет выглядеть примерно так:

//global asax
void Application_Load() 
{
  IKernel kernel = new StandardKernel();

  kernel.Bind<iRepository>().To<Repository>();

  DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));
}

Здесь вы можете узнать, как заставить работать механизм разрешения зависимостей: http://www.shahnawazk.com/2010/12/dependency-injection-in-aspnet-mvc-3.html

...