gpt4 book ai didi

mef - 如何使用托管可扩展性框架发布导出部分

转载 作者:行者123 更新时间:2023-12-04 17:36:59 31 4
gpt4 key购买 nike

我了解 CompositionContainer.ReleaseExport() 的工作方式如下:

  1. 它执行部件的 Dispose 方法;
  2. 它从 CompositionContainer 中删除该部分。

我附上了一个简短的节目。当程序运行时,我希望看到

  1. 在控制台窗口中输入“this is Foo.Dispose”,以及
  2. 在调试器中,composablePartCatalog.Parts 计数应为零。

不是这样的。任何人都可以阐明这一点吗?

为了回应 Daniel Plaisted 的回复,我简化了示例程序。我仍然没有在控制台窗口中看到文本“this is 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();    }  }}

最佳答案

您应该在控制台中看到“this is Foo.Dispose”。

目录应该还是有的吧。目录包含零件定义,容器包含零件。 Foo 的部分/实例将从容器中处理和删除,但定义仍将在目录中。由于该定义仍在目录中,您可以通过再次调用 GetExport 创建另一个定义。

关于mef - 如何使用托管可扩展性框架发布导出部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5550854/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com