2010-11-30 5 views
0

Ich bin neu in Ninject und ich bin neu Stackoverflow auch.Ninject Get Instance von Kernel

ich es mit der ninject.web.mvc Erweiterung verwende, konnte ich es so richtig initialisieren:

public class MvcApplication : NinjectHttpApplication 
{ 
    protected override void OnApplicationStarted() 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 

    protected override IKernel CreateKernel() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Load(AssemblyLocator.GetBinFolderAssemblies()); 
     return kernel; 
    } 
} 

Und hier ist meine Klasse assemlylocator, die alle Baugruppen im Ordner ist abtastet, Suche nach allen Ninject-Modulen in der Baugruppe.

public static class AssemblyLocator 
{ 
    private static readonly ReadOnlyCollection AllAssemblies = null; 
    private static readonly ReadOnlyCollection BinFolderAssemblies = null; 

    static AssemblyLocator() 
    { 
     AllAssemblies = new ReadOnlyCollection<Assembly>( 
      BuildManager.GetReferencedAssemblies().Cast<Assembly>().ToList()); 

     IList<Assembly> binFolderAssemblies = new List<Assembly>(); 

     string binFolder = HttpRuntime.AppDomainAppPath + "bin\\"; 
     IList<string> dllFiles = Directory.GetFiles(binFolder, "*.dll", 

     SearchOption.TopDirectoryOnly).ToList(); 

     foreach (string dllFile in dllFiles) 
     { 
      AssemblyName assemblyName = AssemblyName.GetAssemblyName(dllFile); 
      Assembly locatedAssembly = AllAssemblies.FirstOrDefault(a => 
      AssemblyName.ReferenceMatchesDefinition(a.GetName(), assemblyName)); 

      if (locatedAssembly != null) 
      { 
       binFolderAssemblies.Add(locatedAssembly); 
      } 
     } 

     BinFolderAssemblies = new ReadOnlyCollection<Assembly> (binFolderAssemblies); 
    } 

    public static ReadOnlyCollection<Assembly> GetAssemblies() 
    { 
     return AllAssemblies; 
    } 

    public static ReadOnlyCollection<Assembly> GetBinFolderAssemblies() 
    { 
     return BinFolderAssemblies; 
    } 
} 

Alles funktioniert in meinem Controller fein:

public class ReteController : Controller 
{ // // GET: /Rete/ 

    private readonly IReteService _service; 

    public ReteController(IReteService _service) 
    { 
     if (_service == null) 
     { 
      throw new ArgumentNullException("IReteService"); 
     } 
     this._service = _service; 
    } 

    public ActionResult Index() 
    { 
     return View(_service.getReti()); 
    } 

Bis hier fast alles war leicht zu erlernen, jetzt mein Problem ist, dass, wenn ich brauche eine neue Instanz eines Objekts zu erstellen, die in binden, wurde das NinjectModul Von Ninject weiß ich nicht, wie ich den Kern von heare erreichen kann.

//this is jus a ex. 

public ActionResult NewRete() { 
    IRete xItem = Kernel.get(); 
    xItem.name= "hope"; 
    return View(xItem); 
} 

Das Problem ist, dass ich nicht in der Lage bin, den Kernel von meinem Controller zu finden. Ich muss es auch im Konstruktor einspeisen ??

Ich hoffe, jemand kann mir helfen. Vielen Dank für die große Hilfe, die ihr mir die ganzen Tage gegeben habt.

Antwort