gpt4 book ai didi

c# - 什么时候将 RegistrationBuilder 传递给 Catalog?

转载 作者:行者123 更新时间:2023-11-30 12:47:10 26 4
gpt4 key购买 nike

使用新的 Fluent MEF 编程模型,如果我有多个目录:

  1. 我要将我的 RegistrationBuilder 传递给哪个目录???
  2. 我是否需要将 RegistrationBuilder 传递给 SatisfyImportsOnce 调用?
  3. 我使用 SatisfyImportsOnceComposeParts 中的哪一个? (在流利的 mef 中有什么变化吗?)

例如这是一个示例来说明我的困惑(请参阅对 r.h.s 的评论):

// Get pre-wired registration builder
RegistrationBuilder rb = new MefCompositionRoot().CommonRegistrationBuilder();

// Register this WCF service class
rb.ForType<LogService>().Export<LogService>();


var assembly = typeof (LogService).Assembly;
var assemblyCatalog = new AssemblyCatalog(assembly, rb); // <-- HERE?
var dirCatalog = new DirectoryCatalog("bin", rb); // <-- and HERE?

// Combine catalogs
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(dirCatalog);
catalog.Catalogs.Add(assemblyCatalog);

var container = new CompositionContainer(catalog);

container.SatisfyImportsOnce(this, rb);// THIS?
container.ComposeParsts(this); ///or THIS?

最佳答案

  1. 你可以把RegistrationBuilder到您想要使用 MEF 约定的任何目录。如果您只想使用约定模型,请在所有目录中使用它。如果DirectoryCatalog在您的示例代码中,将加载仅包含属性导出/导入的程序集,那么您不需要 RegistrationBuilder .请注意,两种模型(属性模型和争用模型)可以共存。所以,你可以添加 RegistrationBuilder到所有目录,除非可能有一种类型满足您不想想在 CompositionContainer 中使用的规则(使用 RegistrationBuilder 配置) .
  2. SatisfyImportsOnce 的重载是一个谜语。从文档(以及快速查看 MEF 的源代码)来看,您似乎可以临时使用特定的 RegistrationBuilder。实际上,我只成功地将它与下面的代码示例一起使用。
  3. SatisfyImportsOnce禁用重组。看看这个excellent answer关于这个问题。

使用 SatisfyImportsOnce(Object, ReflectionContext) 的示例

private static void TestLateRegistration_SameBuilder_Ok()
{
var rb = new RegistrationBuilder();
var assemblyCatalog = new AssemblyCatalog(typeof(LogService).Assembly, rb);

using (var container = new CompositionContainer(assemblyCatalog))
{
rb.ForType<LogService>().Export();
var server = new TypeImportingLogService();
//Use the same RegistrationBuilder.
container.SatisfyImportsOnce(server, rb);
}
}

关于c# - 什么时候将 RegistrationBuilder 传递给 Catalog?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17680254/

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