У меня есть хост-приложение WinForm, расширенное с помощью UserControls.Композиция и реализация прекрасно работают при первом запуске.Когда я закрываю пользовательский элемент управления, я хочу предположить, что он должен быть утилизирован.Однако это вызывает проблему, когда я хочу снова показать пользовательский элемент управления.
Что я хочу сделать, так это вернуть пользовательский элемент управления в его исходное состояние после того, как я убедился, что объект был удален из любых ресурсов.
Вот один из пользовательских расширений:
[ExportMetadata ( "ModuleName", "ContactManager" )]
[Export ( typeof ( IUserModule ) )]
partial class ucxContactManager : IUserModule
{
#region Fields
// Fields
readonly string moduleName = "ContactManager";
readonly string moduleDescription = "Contact Manager Extension Module";
// called from ucxContactManager constructor
void InitializeUserModule ( )
{
Closing += ( o, e ) => Dispose ( );
uxCloseContactForm.Click += ( o, e ) => Closing ( this, null );
}
// IUserModule Members
public event EventHandler<EventArgs> Closing = delegate { };
}
CompositionController выполняет всю работу по обнаружению и составлению, предоставляя метод для запроса определенного модуля:
// Lazily import all IUserModule interfaces
[ImportMany ( typeof ( IUserModule ), AllowRecomposition = true )]
public IEnumerable<Lazy<IUserModule, IQueryMetadata>> Modules { get; set; }
public bool TryGetModule ( string ModuleName, out IUserModule Module )
{
var module = Modules.Where ( m => m.Metadata.ModuleName == ModuleName )
.Select ( m => m )
.FirstOrDefault ( );
if (module != null)
{ Module = module.Value; }
else
{ Module = null; }
return Module != null;
}
Теперь, когда мы находим модуль, назначение module.Value
вызывает инициализацию UserControl - вызывается конструктор.
Когда UserControl закрывается и удаляется, как я могу вернуть модуль в это начальное состояние?