Je commence actuellement ASP.NET MVC 4 et dans le livre que je suis en train de lire, l'auteur a présenté Ninject pour l'injection de dépendance. Il a créé un résolveur de dépendance personnalisé (dont je ne comprends pas complètement le fonctionnement, mais je pense qu'il est utile de gérer facilement la résolution des dépendances).Comment ASP.NET MVC sait-il quel constructeur de contrôleur appeler?
Voici le code du contrôleur:
public class HomeController : Controller
{
private Product[] products = {
new Product {Name = "Kayak", Category = "Watersports", Price = 275M},
new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M},
new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M},
new Product {Name = "Corner flag", Category = "Soccer", Price = 34.95M}
};
private IValueCalculator calc;
public HomeController(IValueCalculator calcParam)
{
calc = calcParam;
}
public ActionResult Index()
{
ShoppingCart cart = new ShoppingCart(calc) { Products = products };
decimal totalValue = cart.CalculateProductTotal();
return View(totalValue);
}
}
Et le résolveur de dépendance personnalisée:
public class NinjectDependencyResolver : IDependencyResolver
{
private IKernel kernel;
public NinjectDependencyResolver()
{
kernel = new StandardKernel();
AddBindings();
}
public object GetService(Type serviceType)
{
return kernel.TryGet(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.GetAll(serviceType);
}
private void AddBindings()
{
kernel.Bind<IValueCalculator>().To<LinqValueCalculator>();
}
}
Dans Application_Start(), le résolveur a été fixé:
DependencyResolver.SetResolver(new NinjectDependencyResolver());
Questions:
Comment ASP.NET MVC a-t-il su quel constructeur de contrôleur appeler? J'ai supposé qu'il allait appeler le constructeur par défaut mais il n'y en a pas un, j'ai essayé d'en ajouter un, toujours le constructeur avec le paramètre a été appelé.
Comment ASP.NET MVC a-t-il transmis IValueCalculator au constructeur?
via la configuration de routage définie. –
Pro ASP.NET MVC 5! – Josh