我正在使用MEF(依賴注入,構造函數注入)導入一個Lazy<MyForm>
對象,基本上有問題,當我顯示並關閉表單並且之後嘗試再次打開表單時,它將不再工作,導致對象已經處理完畢。每次我打開它時,我都想要一個全新的表單實例。懶惰<T> - 總是創建一個新的對象?
有沒有類似Lazy<T>
的類,但總是給我一個新的對象?
編輯:
我不能給你我的代碼的那一刻,但我會有點細講:
哪裏有兩種形式:
Form1的是起點表單,其中有一個ImportingConstructor目前正在導入一個Lazy<Form2>
對象。 我的Form2
也有一個ImportingConstructor,它可以導入其他幾個類。 當我點擊Form1
上的按鈕時,正在訪問m_lazyForm2.Value
,並且Form2
顯示出來。
MEF(和我的Form1)使用我自己構建的引導程序初始化。
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以及您如何使用它。 –