Ninject.MVC3, Nuget, WebActivator oh mein

Will ich setup Ninject, um einen einfachen test, sowie demonstrieren ease-of-setup unter Verwendung von Nuget. Ich möchte lösen, ein Probe-service.

public interface ITestService
{
    string GetMessage();
}
public class TestService : ITestService 
{
    public string GetMessage() { return "hello world"; }
}

Ich das NuGet " Install-Package NinjectMVC3 .... es schön fällt NinjectMVC3.cs in mein App_Start-Ordner, dekoriert mit einigen WebActivator Attribute, bis alles geladen ist.

Nächstes füge ich meine Bindung in der NinjectMVC3.RegisterServices Methode:

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

Jetzt will ich zu 'verwenden' Ninjet zu beheben meine ITestService.

public ActionResult Index()
{
  //[Ninject, give me the service I need]
  ITestService service = ??? 

  ViewBag.Message = service.GetMessage();
  return View();
}

Gibt es einen anderen Teil der Einrichtung Ninject?
Brauche ich, um eine resolver?

Was ist der code, den ich lösen muss meine ITestService.

thanksasking Hilfe »

** * * * * * * * * * * * Update: * * * * * * * * * * * * * * * * **

Danke für die tollen Antworten, die bezüglich des controller-Konstruktor' Injektion.
Einfaches hinzufügen einen Konstruktor mit der ITestServcice als param .... HOPPLA !!!

private ITestService _service;

public HomeController(ITestService service)
{
  _service = service
}
public ActionResult Index()
{
  ViewBag.Message = _service.GetMessage();
  return View();
}

Was ist nun die ideale Lösung für Sie, wenn ich brauche, um die der Kernel direkt.

var kernel = ... //Go grab the kernel from ????? (thanks Judah).
ITestService service = kernel.Get<ITestService>();

Sehe ich die NinjectMVC3 Klasse erstellt den Kernel, aber nicht halten Sie oder setzen Sie ein Verweis darauf, noch finde ich ein offensichtlich Klasse/Methode, um die 'kernel'.

Ich nehme an, dir ist ein Ninject-Weg, es zu bekommen, aber nicht sicher.

** * * * * * * * * * * * (Final Update) : * * * * * * * * * * * * * * * * **

Nochmals vielen Dank für die Antworten und Kommentare ....

Korrektur: Die NinjectMVC3 Klasse erstellt den Kernel, und hält Verweis auf die "Bootstrapper", die als IKernel drauf.

Also habe ich ein 'lösen' Methode der App_Start/NinjectMVC3 Klasse ... funktioniert Super.

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>();
   }
}
  • Dies ist sicherlich eine Frage der Meinung, sondern die Ihrer NinjectMVC3.Beheben<T> statische Methode ist ein Beispiel für den service locator anti-pattern. Generell, dependency injection sollte sein, "zu sagen, Fragen Sie nicht," Art der Sache. Mark Seemann beschreibt dies in seinem blog, die möglicherweise helfen, zu klären, die Dinge ein wenig. blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx
InformationsquelleAutor Rob | 2011-03-15
Schreibe einen Kommentar