2017-08-22 1 views
0

suppose que j'ai une interface et la classe comme celui-ciComment implémenter DI en utilisant Unity sur une classe qui a un constructeur - mvc?

public interface ILienholderBusinessService 
    { 
     string GetCoverage(IList<PolicyVinRequest> InputList); 
    } 

public class LienholderBusinessService : ILienholderBusinessService 
    { 
     public ILienholderPolicySearchDataService LienholderPolicySearchDataService { get; set; } 

     public LienholderBusinessService(ILienholderPolicySearchDataService LienholderPolicySearchDataService) 
     { 
      this.LienholderPolicySearchDataService =LienholderPolicySearchDataService ; 
     } 
     public string GetCoverage(IList<PolicyVinRequest> InputList) 
     { 
      return "my string"; 

     } 
    } 

J'ai un contrôleur comme celui-ci

public class InsuranceVerificationPortalController : Controller 
    { 
     public ILienholderBusinessService LienholderBusinessService { get; set; } 
     public InsuranceVerificationPortalController(ILienholderBusinessService LienholderBusinessService) 
     { 
      this.LienholderBusinessService = LienholderBusinessService; 
     } 
} 

maintenant lorsque je tente de mettre en œuvre l'unité dans mon MVC, je reçois erreur comme

êtes-vous absent tout type

Comment puis-je implémenter DI en utilisant Unity sur une classe qui a un constructeur

Répondre

1

Vous devrez enregistrer les mappages pour toutes les interfaces dont vous avez besoin pour résoudre des types concrets. À partir du code affiché ce serait ILienholderBusinessService et ILienholderPolicySearchDataService:

container.RegisterType<ILienholderBusinessService, LienholderBusinessService>(); 
container.RegisterType<ILienholderPolicySearchDataService, LienholderPolicySearchDataService>(); 

Il se pourrait que la mise en œuvre de ILienholderPolicySearchDataService dépend également des interfaces/classes abstraites (par exemple IRepository<T>). Si tel est le cas, les mappages devront également être créés pour ceux-ci. Par défaut, Unity sélectionnera le constructeur avec le plus grand nombre de paramètres. Si vous devez choisir un autre constructeur, vous pouvez utiliser un InjectionConstructor. par exemple.

container.RegisterType<ILienholderPolicySearchDataService, LienholderPolicySearchDataService>(
    new InjectionConstructor(typeof(IRepository<Policy>)));