quelqu'un peut aider, j'ai un petit problème, j'ai une interface et également une interface de base, lorsque je tente de faireC#: Héritage et IDisposable - question étrange
.Dispose()
Il ne trouve pas la méthode comme il est implémenté sur ma sous-classe NOT base .. et il semble toujours vouloir appeler la base - même si j'ai spécifiquement mis l'espace de noms devant le paramètre sur le constructeur.
Voici un peu de code pour l'expliquer, il y a fondamentalement 2 IhouseRepository (interfaces), 1 est l'interface de base et l'une est l'interface de la sous-classe.
Dans le constructeur j'ai spécifiquement dit son MarkSmith.Data (et non MarkSmith.DataBase) mais il continue à ramasser la version de DataBase où Dispose n'est pas implémenté.
Mon idée était d'implémenter IDisposable dans toutes les sous-classes et il devrait y avoir la responsabilité d'éliminer.
Dans le constructeur j'ai mis une seule ligne qui appelle le IhouseRepository et je "CAN" accès Dispose - donc ça marche - Pourquoi ça marche ici pas sur le param passé au constructeur est un mystère :-)
mais le constructeur sur le param semble forcer l'espace de noms DataBase et non des données
Je suppose que je pourrais renommer toutes mes interfaces sur le projet de base à IHouseRepositoryBase mais je ne comprends pas pourquoi cela se passe.
Toute aide vraiment apprécié
public class HouseService : ServiceBase.HouseService, IHouseService
{
public HouseService(MarkSmith.Data.IHouseRepository repository)
: base(repository)
{
MarkSmith.Data.IHouseRepository test =
new MarkSmith.Data.HouseRepository(new MyDataContext);
test.Dispose(); // THIS WORKS! NO PROBLEMS
}
// Dispose() calls Dispose(true)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// free managed resources
if (repository != null)
{
repository.Dispose(); // THIS FAILS .. IT IS CALLING NS DATABASE
}
}
Je dois admettre que je n'ai pas bien compris votre question. Est-ce que IHouseRepository dérive de IDisposable? Si non, pourquoi pas? – Heinzi
Votre code a également besoin d'un nettoyage général, à mon avis (les meilleures pratiques recommandent généralement contre les sous-classes). J'ai du mal à suivre ce que tu as fait. Où avez-vous implémenté IDisposable? – senfo
Qu'est-ce que "IT IS CALLING NS DATABASE" signifie? – cdiggins