J'ai travaillé sur un générateur de code pour mes projets et, bien que tout a bien fonctionné. Mais maintenant, je suis tombé sur un détail que je ne suis pas sûr de savoir comment résoudre. C'est pour ma couche DAL, qui est destinée à permettre des implémentations pour diferente dataSources.C# Classes partielles génériques, interfaces, AND héritage, toutes dans la même question! (oh mon!)
donc j'ai une interface:
public interface IUsersDALBase
{
//defined methods
}
une classe générique qui implémente:
public class UsersDALBase<T> : DBDataAccessBase where T : DBDataAccessBase, IUsersDALBase, new()
{
protected T _UsersInstance = default(T);
public string connectionString
{
get { return _UsersInstance.connectionString; }
set { _UsersInstance.connectionString = value; }
}
//constructors (...)
//interface method implementations, that call _UsersInstance methods (...)
}
Pour référence, DBDataAccessBase ne détient que la chaîne de connexion et a la disposition des méthodes pour normaliser le * Classes DALBAse. Il y a aussi une définition dérivée vide étendue (et là pour ne pas avoir besoin du suffixe « Base »):
public partial class UsersDAL<T> : UsersDALBase<T> where T : DBDataAccessBase, IUsersDALBase, new()
{
//empty in generated file
}
cette classe est juste une enveloppe autour UsersDALBase et est celui que je veux étendre dans un nouveau fichier. Les classes de type T sont principalement générées automatiquement, mais avec des implémentations spécifiques à DB.
Donc finalement, je veux étendre UsersDAL dans un autre fichier avec des méthodes personnalisées que le code généré ne fonctionne pas et représenté par une nouvelle interface
public interface IUsers2
{
UsersList GetAppRoleUsers(int NS_AppRole);
}
J'essaie quelque chose comme:
public partial class UsersDAL<T> : UsersDALBase<T> where T : DBDataAccessBase, IUsers2, new()
{
//interface method implementation
//compile error: Partial declarations of 'DAL.UsersDAL<T>' have inconsistent
//constraints for type parameter 'T' -supose i can't have diferente interface
//implementations for T...
}
Je veux fondamentalement que UserDAL ait toutes les méthodes autogénérées (qui implémentent IUsersDALBAse) et les méthodes que j'ai définies dans la nouvelle interface IUsers2. Des idées sur comment je peux obtenir ceci ???
Merci!
actuellement, non, mais je suppose que je devrais l'inclure dans la prochaine itération. Mon travail pour cela maintenant est juste d'implémenter un ensemble spécifique de classes pour la nouvelle interface. Un peu comme une implémentation de responsabilité unique. Merci pour la clarification. – MytyMyky