Я хочу настроить Ninject для проведения простого теста, а также продемонстрировать простоту настройки с помощью Nuget. Я хочу разрешить образец сервиса.
public interface ITestService
{
string GetMessage();
}
public class TestService : ITestService
{
public string GetMessage() { return "hello world"; }
}
Я запускаю установочный пакет NuGet NinjectMVC3 .... он приятно помещает NinjectMVC3.cs в мою папку App_Start, украшенную некоторыми атрибутами WebActivator, чтобы загрузить все это.
Далее я добавляю свою привязку в метод NinjectMVC3.RegisterServices:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ITestService>().To<TestServiceOne>();
}
Теперь я хочу использовать Ninjet для разрешения моего ITestService.
public ActionResult Index()
{
//[Ninject, give me the service I need]
ITestService service = ???
ViewBag.Message = service.GetMessage();
return View();
}
Есть ли другая часть для настройки Ninject?
Нужно ли предоставлять распознаватель?
Какой код мне нужен для разрешения моего ITestService.
Благодарность за помощь »
** * * * * * * * * * * * Обновление: * * * * * * * * * * * * * * * * **
Спасибо за отличные отзывы о внедрении контроллера-конструктора.
Просто добавив конструктор с ITestServcice в качестве параметра .... БАММ !!!
private ITestService _service;
public HomeController(ITestService service)
{
_service = service
}
public ActionResult Index()
{
ViewBag.Message = _service.GetMessage();
return View();
}
Теперь, что является идеальным решением, когда мне нужно получить ядро напрямую.
var kernel = ... // Go grab the kernel from ????? (thanks Judah).
ITestService service = kernel.Get<ITestService>();
Я вижу, что класс NinjectMVC3 создает ядро, но не содержит и не предоставляет ссылку на него, а также я не могу найти очевидный класс / метод для «получения ядра».
Я предполагаю, что ты - Неверный способ получить его, но не уверен.
** * * * * * * * * * * * (Финал) Обновление: * * * * * * * * * * * * * * * * **
Еще раз спасибо за ответы и комментарии ....
Исправление: класс NinjectMVC3 создает ядро и содержит ссылку на «Bootstrapper», который в нем является IKernel.
Поэтому я добавил метод 'resolve' в класс App_Start / NinjectMVC3 ... отлично работает.
public static class NinjectMVC3 /// created by the NinjectMVC3 NuGet Packagae
{
// add method to provide a global resolver.
public static T Resolve<T>()
{
return bootstrapper.Kernel.Get<T>();
}
}