私は CompositionBatch を使用して、構成可能なパーツをコンテナーに追加し、後で再構成によって削除します。構成と再構成のすべてがうまく機能します。しかし、私の問題は、基になるオブジェクトが破棄されないことです。私のコードは次のようになります。
[PartCreationPolicy(CreationPolicy.NonShared)]
[Export]
public class NonShared : IDisposable
{
public NonShared()
{
Console.WriteLine("Constructor of NonShared");
}
public void Dispose()
{
Console.WriteLine("Disposing NonShared");
}
}
class Program : IPartImportsSatisfiedNotification
{
[Import(AllowDefault=true, AllowRecomposition=true)]
private NonShared _nonShared;
public void OnImportsSatisfied()
{
Console.WriteLine("Program.OnImportsSatisfied()");
}
static void Main()
{
new Program().Run();
}
private void Run()
{
var partDefinition = AttributedModelServices.CreatePartDefinition(typeof(NonShared), null);
var exportingPart = partDefinition.CreatePart();
var addingBatch = new CompositionBatch();
addingBatch.AddPart(this);
addingBatch.AddPart(exportingPart);
var container = new CompositionContainer();
container.Compose(addingBatch);
// Do something.
var removingBatch = new CompositionBatch();
removingBatch.RemovePart(exportingPart);
container.Compose(removingBatch);
}
}
Nonshared.Dispose() を呼び出したいのですが、そうではありません。AddPart /RemovePart でのパーツの有効期間で説明されているように、この状況では共有されていないパーツを破棄する必要があります。私のコードにいくつかの間違いがありますか?