Sto tentando di utilizzare il seguente interfaccia Repository generico per l'iniezione DI e costruttore:Come utilizzare l'interfaccia del repository che utilizza Generics with Dependency Injection?
public interface IRepository<TEntity> : IDisposable where TEntity : class
Il problema è per definire un'istanza dell'interfaccia, devo fornire il tipo di classe come questo:
private IRepository<Person> _personRepository;
Il problema con questo è se sto usando DI (e sto usando Unity per il framework IoC), quindi devo definire più istanze nel mio costruttore per ottenere tutte le interfacce del repository di cui ho bisogno per lavorare in questo modo:
public MyClass(IRepository<Person> personRepository,
IRepository<Orders> ordersRepository,
IRepository<Items> itemsRepository,
IRepository<Locations> locationsRepository)
{
_personRepository = personRepository;
_OrdersRepository = ordersRepository;
_itemsRepository = itemsRepository;
_locationsRepository = locationsRepository;
}
Domande:
- È questo il posto?
- Se non dovessi perdere questo concetto?
- Anche se questo è corretto, qual è il punto di Unity per registrare l'interfaccia in concreto? L'ho già fatto perché il repository generico mi ha costretto alla dichiarazione.
Si prega di chiarire questo per me, e apprezzo tutto il vostro aiuto!
Quello che vorrei poter fare è avere 'IRepository repository' come il parametro del metodo, ma so che non funzionerà. Puoi spiegare perché non lo farà? Sembra sbagliato passare tutti quelli dentro, ma forse è corretto e sto pensando troppo. –
atconway
Poiché ciascun repository è di un tipo diverso e MyClass (apparentemente) richiede 4 diversi repository. Devi fornire le lezioni concrete separatamente. Non è sbagliato (o raro) avere diverse dipendenze iniettate come fai tu. –
Ma con quale situazione avrei bisogno di un metodo aggiuntivo? – krypru