Je suis nouveau sur Ninject et je suis nouveau sur stackoverflow.Ninject Obtenir l'instance du noyau
Je l'utilise avec l'extension ninject.web.mvc, j'ai pu initialiser correctement comme ceci:
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;
}
}
Et voici ma assemlylocator de classe qui scanne tous les ensembles dans le dossier bin, rechercher tous les modules Ninject dans l'assemblage.
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;
}
}
Tout fonctionne très bien dans mon contrôleur:
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());
}
Jusqu'à ici presque tout était facile à apprendre, maintenant mon problème est que si je dois créer une nouvelle instance d'un objet qui a été se lier à le NinjectModule de Ninject Je ne sais pas comment accéder au noyau depuis heare. Le problème est que je n'arrive pas à trouver le noyau de mon contrôleur. J'ai besoin de l'injecter aussi dans le constructeur ??
J'espère que quelqu'un peut m'aider. Merci beaucoup pour la grande aide que vous m'avez apportée tous les jours.
Bonjour Remo. J'ai rencontré ce post fantastique de Mark Seemann, http://blog.ploeh.dk/2010/08/30/DontCallTheContainerItllCallYou.aspx –