Получить экземпляр объекта с помощью Ninject - PullRequest
21 голосов
/ 11 октября 2011

Я установил в свой проект Ninject.MVC3 через Nuget.

Я прочитал эту статью , что для внедрения зависимостей в мои контроллеры все, что вам нужно было сделать, это установить Ninject, добавить мои зависимости в NinjectMVC3.cs и готово.

Пока все хорошо, но как получить экземпляр объекта?

public ActionResult MyAction()
{
    var myObject = /* HERE  ??*/
}

В конструкторе контроллера У меня нет проблем!

public class AccountController : Controller
{
    public AccountController(IRepository repository) { ... } //This works!!
}

1 Ответ

35 голосов
/ 11 октября 2011

Причина, по которой это работает, в том, что ControllerFactory ищет DI и автоматически добавляет его. Если вы хотите получить конкретный экземпляр, вы можете сделать это:

private static void RegisterServices(IKernel kernel) {
    kernel.Bind<ICoolObject>().To(CoolObject);
}

public ActionResult MyAction() {
    var myObject = 
        System.Web.Mvc.DependencyResolver.Current.GetService(typeof (ICoolObject));
}

Осторожно, хотя. Это делается довольно часто с новичками в Dependency Injection (включая меня). Вопрос в том, зачем вам это нужно?

...