DependencyResolver.Current.GetService всегда возвращает ноль - PullRequest
8 голосов
/ 11 октября 2011

Согласно этому руководству , чтобы использовать Ninject в моем приложении Asp.net MVC 3, все, что мне нужно сделать, это установить пакет через Nuget и настроить зависимости.

Выполните следующие действия

Установить Package-Ninject.MVC3

In NinjectMVC3.cs

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

In Контроллер

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Registe(RegisterModel model)
{
    var myObject = DependencyResolver.Current.GetService<IReCaptchaValidator>(); //always null
}

myObject всегда возвращает ноль.

Я пробовал kernel.Bind<IReCaptchaValidator>().To<ReCaptchaValidate>().InRequestScope(), но не действует!

myObject продолжается ноль

В этом посте здесь, в StackOverflow, мне сказали использовать DependencyResolver.Current.GetService(TYPE) для извлечения экземпляра объекта.

1 Ответ

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

В сообщении, на которое вы ссылаетесь, вам не сказали использовать DependencyResolver, просто его можно использовать.Вы не должны использовать его, поскольку это хорошо известный анти-шаблон.

Хотя прямое использование DependencyResolver должно работать, вам действительно не следует делать это таким образом.

Вместо этого вам следуетиспользуйте Constructor Injection, чтобы ваш класс принял тип в качестве параметра вашего конструктора.

public class MyController : Controller {
    IReCaptchaValidator _validator;

    public MyController(IReCaptchaValidator validator)
    {
        _validator = validator;
    }
}

Затем в вашем методе:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult Registe(RegisterModel model)  
{  
    var myObject = _validator;
}  
...