Comment s'appelle le constructeur du Web API Controller?
Selon cet articleun Contrôleur de gestion doit avoir un constructeur qui reçoit l'interface doit être mis en œuvre passé en, à la:
public class DuckbillsController : ApiController
{
IDuckbillRepository _platypiRepository;
public DuckbillsController(IDuckbillRepository platypiRepository)
{
if (platypiRepository == null)
{
throw new ArgumentNullException("platypiRepository is null");
}
_platypiRepository = platypiRepository;
}
}
Mais comment est-ce constructeur appelé? A compter via un client de l'appel d'une API Web méthode figurant au sein de cette classe, mais comment fait-il passé le type d'Interface? Ou ne pas se produire (constructeur n'est pas explicitement appelé par n'importe qui/n'importe où)?
Mise à JOUR
Les exemples canoniques spectacle "private readonly" ajouté à la déclaration d'Interface, mais ce n'est pas nécessaire pour compiler. Est-il de la compilation, je veux dire irrésistible, de la raison, pour moi de la faire précéder de "private readonly"?
source d'informationauteur B. Clay Shannon | 2013-12-23
Vous devez vous connecter pour publier un commentaire.
Le contrôleur de l'usine crée pour vous... Vous avez besoin d'avoir un coup d'oeil à l'Injection de Dépendance.
Essayer Autofac, il a une belle intégration pour MVC.
Car il n'y a pas de documentation sur ce de n'importe où (l'officiel docs seulement discuter de la faire avec l'Unité). Voici comment vous le faites.
La
HttpConfiguration.DependencyResolver
propriété est une instance deIDependecyResolver
qui est essentiellement un localisateur de service (vous demandez une instance de type, et il sait comment le créer). Ce que je voudrais, c'est de fournir mon propre contrôleur de l'instanciation.Utiliser comme:
Mis en œuvre comme suit:
Le truc, c'est que vous avez réellement à mettre en œuvre
IDependencyScope
deux fois - une fois pourIDependencyResolver
et une fois pour la portée, il crée à chaque demande.Vous devez utiliser l'injection de dépendance ( structuremap, ninject) quoi que ce soit. Si vous ne voulez pas l'utiliser DI, alors vous devez fournir une surcharge de constructeur comme indiqué ci-dessous