J'essaie d'utiliser Unity avec mon service de données WCF (OData). J'ai le code qui ressemble à ceci: (., Soit le vrai PatientRepository ou un truquée que j'utilise pour le test)Unity et OData (services de données WCF)
public class PatientService : DataService<IPatientRepository>
Je veux l'unité d'injecter l'objet correct pour IPatientRepository au moment de l'exécution
Je fait le:
IUnityContainer container = new UnityContainer();
container.RegisterType<IPatientRepository, MyEntities>();
Mais quand je cours, je reçois:
le serveur a rencontré un traitement d'erreur la demande. Le message d'exception est 'Impossible de créer le fournisseur de données. Tapez 'RepositoryInterfaces.IPatientRepository' pour la source de données dans 'PatientService.PatientService' est abstrait. '
Existe-t-il un moyen d'injecter cette dépendance? Ou dois-je mettre la vraie classe à cet endroit?
Vous pouvez définir les DataService où T est une interface. Mais alors vous devez surcharger la méthode CreateDataSource et instancier la classe de contexte (qui implémente cette interface). Je ne sais pas si cela fonctionnera avec l'injection si. –
@Vitek: Peut-être que si vous substituez CreateDataSource, puis utilisez ServiceLocator dans le remplacement? Cela pourrait fonctionner. –
Essayez de ne pas utiliser ServiceLocator si vous pouvez l'éviter. C'est un anti-pattern tel que décrit dans cet article http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/ par Mark Seemann, qui était le développeur original de la classe ServiceLocator pour Microsoft Patterns and Practices. Il est parti tout de suite pour de bonnes raisons. –