2012-03-31 2 views
1

Ich sehe there is an extension for Ninject integration mit asp.net-mvc aber es sieht so aus, als ob ich Ninject mit mvc gut ohne diese Erweiterung integrieren kann. Zum Beispiel:Muss ich die Erweiterung ninject.mvc noch verwenden?

public class NinjectDependencyResolver : IDependencyResolver 
    { 
     private readonly IResolutionRoot _resolutionRoot; 

    public NinjectDependencyResolver(IResolutionRoot resolutionRoot) 
    { 
     _resolutionRoot = resolutionRoot; 
    } 

    public object GetService(Type serviceType) 
    { 
     return _resolutionRoot.TryGet(serviceType); 
    } 

    public IEnumerable<object> GetServices(Type serviceType) 
    { 
     return _resolutionRoot.GetAll(serviceType); 
    } 
} 


public class MvcApplication : HttpApplication 
{ 
    void Application_Start() 
    { 
     var modules = new INinjectModule[] { new ServiceModule() }; 
     var kernel = new StandardKernel(modules); 

     DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 

Ist dies eine Legacy-Erweiterung oder ist sie noch relevant? Ich sehe die letzten Aktualisierungen des Quellcodes, so dass ich etwas verwirrt war.

Antwort

5

Sie können Ihren eigenen Dependency Resolver implementieren. Also ja, du brauchst es nicht. Sie können Ninject ganz einfach ohne die Erweiterung integrieren. Aber die Frage ist, warum sollten Sie das tun? Die Erweiterung Ninject.MVC3 bietet alles, um Unterstützung für Ninject hinzuzufügen, ohne einen eigenen Dependency Resolver implementieren zu müssen. Dies hat mehrere Vorteile:

  1. Im Gegensatz zu der Implementierung, die Sie vorschlagen, ist die Implementierung dieser Erweiterung korrekt und hat sich in vielen Anwendungen bewährt.
  2. Es ist zusammen mit Ninject Kern gehalten. Falls Ninject Core Änderungen durchführt, werden alle notwendigen Änderungen für Sie vorgenommen. Z.B. Ninject 3.0.0 Core hat kein InRequestScope mehr, aber mit Ninject.MVC3 haben Sie diesen Bereich noch.
  3. Diese Erweiterung ist viel mehr als ein Dependency Resolver. Lesen Sie the documentation!
  4. Es läuft Seite beiseite mit anderen Web-Technologien und die Konfiguration kann geteilt werden. Z.B. MVC4 Web API, WCF, WebForms
+0

in Bezug auf # 1, was ist falsch mit der vorgeschlagenen Implementierung? – leora

+0

@leora - ich weiß es nicht aus der Hand, aber da Remo das existierende geschrieben hat und den Code anschaut, macht es viel mehr Sachen (wie mit dem Anforderungsbereich umzugehen, nehme ich an?), Würde ich annehmen, dass es mindestens " Support Request Scope "(aber nicht sicher, ob das stimmt oder nicht) –

+0

@leora Es wird nicht mehrere Enumeration korrekt behandelt, die zu seltsamen Verhaltensweisen führt, ist einige Szenarien. Und wegen TryGet wird es sehr schwierig einige Konfigurationsprobleme zu erkennen. –