Ich habe das folgende Codebeispiel:
public interface IRepository {
// Whatever
}
public class SampleRepository : IRepository {
// Implements 'Whatever'
}
public class NHibernateRepository : IRepository, IDisposable {
// ...
public void Dispose() { ... }
}
Jetzt - ist das wirklich schlimm? Ich bin mir nicht sicher, aber das scheint ziemlich dasselbe zu sein wie den Destruktor der Basisklasse nicht als virtuell in C++
.
Ich möchte nicht, dass die IRepository
Schnittstelle implementieren IDisposable
zu implementieren, denn das würde unerwünschte Komplexität und eine Reihe von Klassen mit sich bringen, die ebenfalls IDisposable
.
Wie sollte dieser Fall behandelt werden?
Ich bin sicher, dass dies auch bei beliebige Typenhierarchie - wenn einer der abgeleiteten Typen muss verfügbare Ressourcen zu verwalten.
Was soll ich also tun - den Stecker ziehen? IDisposable
bis zur allerersten Schnittstelle oder belassen wir es dabei und hoffen, dass die Nutzer zwischen Einweg- und Nicht-Einweg-Repositories unterscheiden?
Ich danke Ihnen.