Ich verwende einen Autofac-Container für die gesamte Lebensdauer meiner Anwendung, aber ich möchte die Komponenten selbst entsorgen.Autofac- extern besessener Behälter?
IE, wenn ich builder.RegisterType<SomeType>()
habe, ich will nicht die Container Referenzen von SomeType
zu halten, die auch diejenigen am Leben halten, wenn sie nicht irgendwo anders verwiesen (wenn RegisterInstance
verwendet wird OTOH, dann natürlich die Behälter müssen einen Verweis halten der Singleton).
Ich kann sehen, dass ich builder.RegisterType<SomeType>().ExternallyOwned()
tun kann, die mein Problem für einen Typ löst, aber ich will es nicht für jeden Typ schreiben, und noch wichtiger benutze ich auch builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
, die mir die Option der Verwendung nicht gibt ExternallyOwned
.
Gibt es eine Möglichkeit, "ExternallyOwned" für den gesamten Container anzugeben? Oder anders gesagt, weisen Sie den Container an, die gesamte Verfügungsfunktion zu deaktivieren und Referenzen für Objekte, die er nicht benötigt, nicht zu behalten?
Ich würde Erweiterungs-Methoden auf dem ContainerBuilder in Betracht ziehen, so dass Sie builder.RegisterExternalType() schreiben und bekommen können, was Sie wollten, ohne explizit zwei Methoden überall aufzurufen. –
Mithon
Das ist nicht gut genug, denn wie gesagt, ich benutze auch 'builder.RegisterSource (new AnyConcreteTypeNotAlreadyRegisteredSource());' – tzachs
Ah. Aha. Ich habe diesen Teil vermisst. Dann ist es wohl auch deine eigene Registrierungsquelle, denke ich. Und ehrlich gesagt, wenn man sich anschaut, wie schlank diese Quelle ist, ist das nicht wirklich ein großer Job. :) – Mithon