Je sais que pour StructureMap vous pouvez enregistrer les types génériques en spécifiant les éléments suivants:construction personnalisée avec les génériques ouverts dans StructureMap
StructureMapConfiguration
.For(typeof(IRepository<>))
.Use(typeof(RepositoryImplementation<>));
Lorsque ObjectFactory.GetInstance<IRepository<Entity>>()
est appelée la mise en œuvre correspondant est retourné RepositoryImplementation<Entity>
.
Mais que se passe-t-il si je veux une version encapsulée du référentiel? Une version qui implémente également IRepository<Entity>
- disons CachedRepository<Entity>
qui a un constructeur qui prend une implémentation de IRepository<TEntity>
ctor: CachedRepository(IRepository<Entity> innerRepository)
.
Comment obtenir structuremap pour retourner CachedRepository<Entity>
lorsque vous demandez un IRepository avec le concreate RepositoryImplementation comme innerRepository?
Je voudrais garder l'interface dans le constructeur. En faisant cela, je peux ajouter plus tard d'autres couches de logique au référentiel. I.e CachedRepository -> NotifyingRepository -> LoggingRepository -> TimingRepository -> ActualRepositoryImplementation. En faisant cela, je peux garder la logique séparée de ma mise en œuvre réelle du référentiel –