Also arbeite ich an meinem DI / IoC-Container OpenNETCF.IoC und ich habe eine (vernünftige) Feature-Anfrage zum Hinzufügen eine Form der Lebenszyklusverwaltung für IDisposable-Elemente in den Containersammlungen.
Nach meinem derzeitigen Verständnis kann ich kein Objekt abfragen, um zu sehen, ob es entsorgt wurde, und ich kann kein Ereignis dafür bekommen, wenn es entsorgt wurde, dass ich einen Wrapper für Objekte erstellen muss, die das sind Ein Entwickler möchte, dass das Framework verwaltet wird.
Im Moment können Objekte mit AddNew hinzugefügt werden (der Einfachheit halber nehmen wir an, es gibt nur eine Überladung und es gibt kein Add):
%Vor%Was ich in Betracht ziehe, ist das Hinzufügen einer neuen Methode (naja, eine Gruppe von ihnen, aber Sie bekommen das Bild):
%Vor%Wo das DisposableWrappedObject wie folgt aussieht:
%Vor%Wenn nun ein Element über AddNewDIsposable zum Container hinzugefügt wird, wird auch ein Eventhandler hinzugefügt, so dass das Framework es aus der zugrunde liegenden Sammlung entfernt, wenn es Disposed (über den Wrapper) erhält.
Ich habe das tatsächlich implementiert und es gibt die Komponententests aus, aber ich suche nach Meinungen darüber, wo dies möglicherweise kaputt ist oder wie es gegenüber dem konsumierenden Entwickler "freundlicher" gemacht werden könnte.
BEARBEITEN 1
Da es eine Frage darüber gab, wie das Disposed-Ereignis verwendet wird, folgt hier ein Code (der auf das Wesentliche zugeschnitten ist):
%Vor%Vielleicht fehlt mir etwas, aber warum neue Methoden zur API hinzufügen? Wenn ein Objekt zum Container hinzugefügt wird, können Sie es als Assets abfragen, um zu prüfen, ob es IDisposable ist, und es gegebenenfalls behandeln.
Ich frage mich auch, ob Sie den Destruktor brauchen. Angenommen, der Container ist IDisposable (wie bei Unity), könnten Sie einfach das Basic implementieren Muster entsorgen und viel GC-Overhead sparen.
Einige Fragen, die möglicherweise anwendbar sind:
Tags und Links c# dependency-injection ioc-container compact-framework opennetcf.ioc