Я не могу понять, почему мои компоненты никогда не удаляются / не выпускаются в Autofa c. У меня есть стандартное приложение WPF, которое начинается в app.xaml.cs, разрешая MainVM
, который является синглтоном, и показывает MainWindow
с DataContext
из MainVM
.
Затем я работаю в основном с Внедрение конструктора моих зарегистрированных компонентов, которые являются одиночными или (по умолчанию) instancePerDependency
, каждый раз создавались новыми. Или у меня иногда есть фабрики, чтобы передать какие-то специальные параметры.
Например, фабрики выглядят так:
public delegate MyComponent Factory(string parameter1, int parameter2);
Инъекция выглядит так:
public MainVM(MyComponent.Factory createMyComponent)
...
public void makeNewComponent()
{
var myComponent = this.createMyComponent("test", 1);
myComponent.DoStuff();
}
А это Вот как регистрируются мои компоненты:
containerBuilder.RegisterType<T>().OnActivated(args => (args.Instance as IInitializable)?.Initialize());
builder.RegisterType<MyComponent>().As<IMyComponent>().OnActivated(args => (args.Instance as IInitializable)?.Initialize());
// This will never be called in my code: .OnRelease(instance => (instance as IInitializable)?.Uninitialize())*/;
Теперь давайте представим, что у меня есть много таких моделей представлений, которые создаются внутри других моделей представлений, поэтому у нас есть как MainVM
-> MyComponent
-> OtherComponent
, и после завершения операции я хочу, чтобы они утилизировались (или просто как-то исчезли из памяти), вызывали Dispose()
или вызывали событие OnRelease
из Autofa c. Подойдет любой из них.
Но моя проблема в том, что я не использую этот шаблон:
using(var scope = container.BeginLifetimeScope())
'Потому что я не работаю внутри одного метода от {до}. Мне нужно, чтобы мой компонент жил внутри объекта во многих методах, и после того, как, скажем, я удаляю ViewModel1
из своего стека представления, я хочу, чтобы все, что создано внутри этого ViewModel1
, избавляло / освобождало его дочерние элементы. Что заставляет компоненты думать, что их можно утилизировать? Как я могу сказать, что модель просмотра больше не нужна, если она не создана в пределах времени жизни?