J'ai dit une douzaine de types T
qui héritent de EntityObject
et IDataObject
. je générique l'interface suivanteLocalisateur de service pour les génériques
IDataManager<T> where T : EntityObject, IDataObject ...
J'ai aussi classe de base pour les gestionnaires de données
BaseDataManager<T> : IDataManager<T> where T : EntityObject, IDataObject ....
Et j'ai des classes particulières
public class Result : EntityObject, IDataObject ....
public class ResultDataManager : BaseDataManager<Result> ...
Je veux mettre en œuvre localisateur de service, qui retour instance de IDataManager<T>
pour T
Mais j'ai collé comment l'implémenter de manière ordonnée sans beaucoup de castings.
Des idées?
MISE À JOUR: Je l'habitude d'utiliser le code suivant pour découvrir les types pour les ENREGISTRER avec mon précédent localisateur de service:
foreach (Type type in Assembly.GetExecutingAssembly().GetTypes())
{
if (type.GetInterface("ISQLDataAccessManager") != null && !type.IsAbstract)
{
var manager = (ISQLDataAccessManager)Activator.CreateInstance(type);
_managers.Add(type, manager);
var typeDO = manager.GetDataObjectType();
_typeNames2Types.Add(typeDO.FullName, typeDO);
_managers2BO.Add(typeDO, manager);
}
}
Il semble que je ne comprends pas vraiment la réflexion avec les génériques
demandez-vous comment trouver les instances singleton de datamanagers déjà créé? –
dthorpe
Aussi, pourquoi avez-vous un type param sur votre ResultDataManager? Je pense que ce serait un type concret: classe publique ResultDataManager: BaseDataManager ... –
dthorpe
@dthorpe: bon point sur le type de retour: je veux obtenir ResultDataManager qui implémente BaseDataManager –
vittore