Я хочу настроить 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.
helpasking help "
** * * * * * * * * * * * Обновление: * * * * * * * * * * * * * * * * **
Благодарим вас за отличные ответы, касающиеся "конструктора контроллера". Просто добавление конструктора с ITestServcice в качестве параметра.... BAMM!!!
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 для его получения, но не уверен.
** * * * * * * * * * * * (Final) Обновление: * * * * * * * * * * * * * * * * **
Еще раз спасибо за ответы и комментарии....
Коррекция: класс 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>();
}
}