Avec mon projet de compagnie, j'essaie d'apprendre à utiliser Turbine comme un conteneur DI.Le constructeur du contrôleur paramétré ne se fait jamais frapper
J'enregistrer l'unité comme locatorprovider en tant que tel:
static MvcApplication()
{
ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());
}
Mon référentiel utilisateur dispose d'un constructeur parameterless et je l'enregistrer en tant que tel:
public class UserRepositoryRegistration : IServiceRegistration
{
public void Register(IServiceLocator locator)
{
locator.Register<IUserRepository, UserRepository>();
}
}
J'ai mon HomeController qui devrait accepter un IUserRepository
public class HomeController : Controller
{
private readonly IUserRepository userRepository;
public HomeController(IUserRepository repository)
{
userRepository = repository;
}
}
Si je laisse de côté le ct sans paramètre ou (comme dans l'extrait de code ci-dessus) Je reçois ce (full here):
Server Error in '/' Application. No parameterless constructor defined for this object. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.MissingMethodException: No parameterless constructor defined for this object. [InvalidOperationException: An error occurred when trying to create a controller of type 'Boris.BeekProject.Guis.Web.Controllers.HomeController'. Make sure that the controller has a parameterless public constructor.]
Donc, mon HomeController est obligé d'avoir un cteur de parless. Il semble que ce ne soit pas l'usine de contrôleur Unity qui instancie, mais plutôt la fabrique par défaut.
MISE À JOUR
Mon MVCApplication est héritant TurbineApplication et depuis le RouteRegistration est pris très bien je pense que le problème est ailleurs.
MISE À JOUR
Comme suggéré par Thomas Eyde Je voulais remplacer la méthode TurbineApplication.AutoComponent
, mais vérifier l'Explorateur d'objets, je ne vois aucune référence à cette méthode. En outre, quand je regarde l'exemple de NerdDinner, il ne semble pas outrepasser cette méthode. Après avoir vérifié le online documentation about it j'ai échoué à obtenir le plus sage et en suivant le lien vers la documentation sur doing the registration manually me sert d'une page d'espace réservé. Quelqu'un peut-il me renseigner sur ce que je fais mal?
Ai-je raté quelque chose?
En outre, tous les conseils sur le formatage de cette exception serait bien. J'ai posté un problème sur meta: http://meta.stackexchange.com/questions/32264/posting-a-stack-trace –
Avez-vous hérité de la classe TurbineApplication à votre classe Global.asax MvcApplication? –
@Magnus: Oui, il hérite de TurbineApplication. La chose étrange est que le IRouteRegistration est ramassé bien. –