Я хочу настроить Ninject для выполнения простого теста, а также продемонстрировать простоту настройки с помощью Nuget. Я хочу разрешить пример службы.
public interface ITestService
{
string GetMessage();
}
public class TestService : ITestService
{
public string GetMessage() { return "hello world"; }
}
Я запускаю NuGet Install-Package 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 создает ядро, но не содержит и не предоставляет ссылку на него, и я не могу найти очевидный класс/метод для «получения ядра».
Я предполагаю, что это способ Ninject получить его, но не уверен.
** * * * * * * * * * * * (Окончательное) Обновление: * * * * * * * * * * * * * * * * * **
Еще раз спасибо за ответы и комментарии....
Исправление: класс NinjectMVC3 создает ядро и содержит ссылку на «Bootstrapper», который является на нем IKernel.
Поэтому я добавил метод «разрешения» в класс 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>();
}
}