2010-12-22 6 views
1

Auparavant, je n'utilisais pas d'interface pour mon référentiel générique. Quand j'extrait l'interface de mon référentiel générique, j'ai ajouté deux constructeurs: un parameterless et un des constructeurs paramétrés je reçois l'erreur suivante:Impossible de résoudre le contrôleur

{"Resolution of the dependency failed, type = \"NascoBenefitBuilder.Controllers.ODSController\", name = \"(none)\". 
Exception occurred while: while resolving. 
Exception is: InvalidOperationException - The current type, ControllerLib.Models.Generic.IGenericRepository, is an interface and cannot be constructed. Are you missing a type mapping? 
----------------------------------------------- 
At the time of the exception, the container was: 
Resolving NascoBenefitBuilder.Controllers.ODSController,(none) 
Resolving parameter \"repo\" of constructor NascoBenefitBuilder.Controllers.ODSController(ControllerLib.Models.Generic.IGenericRepository repo) 
Resolving ControllerLib.Models.Generic.IGenericRepository,(none)"} 

Mon contrôleur au début:

public class ODSController : ControllerBase 
{ 
    IGenericRepository _generic = new GenericRepository(); 
} 

Après extraction l'interface et l'utiliser dans le contrôleur:

public class ODSController : ControllerBase 
{ 
    IGenericRepository _generic; 
    public ODSController() : this(new GenericRepository()) 
    { 
    } 

    public ODSController(IGenericRepository repo) 
    { 
     _generic = repo; 
    } 
} 

Lorsque j'utilise un constructeur paramétré, c'est l'erreur de lancement mentionnée ci-dessus.

Quelqu'un peut-il m'aider à surmonter ce problème?

Répondre

2

Vous ne devez plus le constructeur par défaut:

public class ODSController : ControllerBase 
{ 
    private readonly IGenericRepository _repository; 
    public ODSController(IGenericRepository repository) 
    { 
     _repository = repository; 
    } 
} 

Et puis assurez-vous que vous avez correctement configuré votre conteneur Unity:

IUnityContainer container = new UnityContainer() 
    .RegisterType<IGenericRepository, GenericRepository>(); 

Et que vous utilisez l'usine de contrôleur de l'unité dans Application_Start :

ControllerBuilder.Current.SetControllerFactory(typeof(UnityControllerFactory)); 
Questions connexes