我了解 CompositionContainer.ReleaseExport()的工作方式如下:
我附上了一个简短的节目。程序运行时,我希望看到
事实并非如此。任何人都可以对此有所了解吗?
回应Daniel Plaisted的回复,我简化了示例程序。我仍然没有在控制台窗口中看到文本“这是Foo.Dispose”。
namespace MefCa06 { using System; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Reflection; [ ExportAttribute , PartCreationPolicyAttribute(CreationPolicy.NonShared) ] public class Foo : IDisposable { public void ShowMessage() { Console.WriteLine("this is Foo.ShowMessage"); } public void Dispose() { Console.WriteLine("this is Foo.Dispose"); } } class Program { [ImportAttribute] public Foo FooProperty { get; set; } static void Main(string[] args) { Program program = new Program(); CompositionContainer compositionContainer = new CompositionContainer(new AssemblyCatalog(Assembly.GetExecutingAssembly())); compositionContainer.ComposeParts(program); program.FooProperty.ShowMessage(); Lazy<Foo> foo = compositionContainer.GetExport<Foo>(); compositionContainer.ReleaseExport(foo); Console.ReadLine(); } } }
答案 0 :(得分:2)
您应该在控制台中看到“这是Foo.Dispose”。
目录中仍应包含该部分。目录包含零件定义,容器包含零件。 Foo的部分/实例将从容器中处理和删除,但定义仍将在目录中。由于定义仍在目录中,您可以使用另一个GetExport调用创建另一个。