Ho un servizio web che accetta chiamate multiple che richiedono una gestione e una convalida diverse, usando i generici che sono riuscito a creare una classe comune che accetta un gestore e un validatore e assomiglia a questo
public class PetitionService<T1, T2>
where T1 : Headers, Petition
where T2 : Headers
{
PetitionHandler<T1, T2> petitionHandler;
PetitionValidator<T1> petitionValidator;
public PetitionService(PetitionHandler<T1, T2> handler, PetitionValidator<T1> validator)
{
if (handler == null)
{ throw new ArgumentNullException("petitionHandler cannot be null"); }
if (validator == null)
{ throw new ArgumentNullException("petitionValidator cannot be null"); }
petitionHandler = handler;
petitionValidator = validator;
}
public T2 ProcessPetition(T1 petition)
{
petitionValidator.Validate(petition);
return petitionHandler.Handle(petition);
}
}
Va tutto bene e dandy, e funziona perfettamente, ma volevo aggiungere un altro livello su di esso. Una classe factory o un hub messaggi in cui la classe di servizio è mappata dall'ID tipo messaggio. Il problema è che, poiché ogni gestore restituisce un figlio diverso di intestazioni, il chiamante deve annullare la risposta. C'è un modo per evitare l'unboxing, è unboxing non così male o sto solo esagerando?