使用新的流畅的MEF编程模型,如果我有多个目录:
RegistrationBuilder
传递给??? RegistrationBuilder
传递给SatisfyImportsOnce
来电?SatisfyImportsOnce
或ComposeParts
中的哪一个? (流利的mef有什么变化吗?)E.g。这是一个说明我的困惑的例子(见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?
答案 0 :(得分:1)
RegistrationBuilder
放到要使用MEF约定的任何目录中。如果只想使用约定模型,则在所有目录中使用它。如果示例代码中的DirectoryCatalog
将加载仅包含已归属导出/导入的程序集,则您不需要RegistrationBuilder
。请注意,两种模型(属性和争用)都可以共存。因此,您可以将RegistrationBuilder
添加到所有目录中,除非可能存在满足规则(使用RegistrationBuilder配置)的类型不要在{{1}中使用}。使用SatisfyImportsOnce(Object,ReflectionContext)
的示例CompositionContainer