Я импортирую объект Lazy<MyForm>
с использованием MEF (инъекция зависимостей, инъекция конструктора) и в основном имеет проблему: когда я показываю и закрываю форму, а затем пытаюсь снова открыть форму, она больше не будет работать, вызывать объект уже был ликвидирован. Я хочу иметь абсолютно новый экземпляр формы каждый раз, когда я его открываю.Lazy <T> - Всегда создавайте новый объект?
Есть ли класс, похожий на Lazy<T>
, но всегда дает мне новый объект?
Edit:
Я не могу дать вам свой код в данный момент, но я пойду немного более подробно:
Где две формы:
Form1 является отправной form, в котором есть ImportingConstructor, который в настоящее время импортирует объект Lazy<Form2>
. У моего Form2
есть также ImportingConstructor, который импортирует несколько других классов. Когда я нажимаю кнопку на Form1
, происходит обращение к m_lazyForm2.Value
и появляется сообщение Form2
.
MEF (и моя форма1) инициализируются с использованием этого загрузочного устройства, которое я сам создаю.
internal class Bootstrapper<T> where T : Form
{
[Import]
private T m_frmStartup;
private CompositionContainer m_container;
public void Init()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly()));
catalog.Catalogs.Add(new DirectoryCatalog("."));
var batch = new CompositionBatch();
batch.AddPart(catalog);
m_container = new CompositionContainer(catalog);
m_container.ComposeParts(this);
}
public void Start()
{
Application.Run(m_frmStartup);
}
}
Почему вы не можете просто перейти в 'Func', который каждый раз создает новый 'T'? –
Мои классы T имеют ImportingConstructor, а также – Jannik
Показать код, как вы настроили свой DI и как вы его используете. –