作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用容器层次结构来控制 IDisposable 部件的生命周期。子容器附加到包含非共享部件的过滤目录。这是一个代码片段:
[Export(typeof(ITest)), PartCreationPolicy(CreationPolicy.NonShared)]
class Test : ITest, IDisposable
{
public void Dispose() {}
}
public interface ITest {}
class Program
{
static void Main()
{
// parent container to hold shared disposable parts
var cat = new AssemblyCatalog(typeof(Program).Assembly);
var parent = new CompositionContainer(cat);
// child container to hold non-shared disposable parts
var nsCat = CreateNonSharedPartCatalog(cat);
var child = new CompositionContainer(nsCat, parent);
// no cardinality mismatch exception: exactly one export found
var exp = child.GetExport<ITest>();
// lazy exports: count == 2 -- why?
var exports = child.GetExports<ITest>();
Console.WriteLine("Exports count = {0}", exports.Count());
}
static ComposablePartCatalog
CreateNonSharedPartCatalog(ComposablePartCatalog cat)
{
return new FilteredCatalog(cat,
def => def.Metadata.ContainsKey(
CompositionConstants.PartCreationPolicyMetadataName) &&
((CreationPolicy)def.Metadata[
CompositionConstants.PartCreationPolicyMetadataName]) ==
CreationPolicy.NonShared);
}
}
(FilteredCatalog 类与 MEF 文档中提到的类相同)。
GetExport 不会抛出基数不匹配异常,这表明没有歧义(恰好找到一个导出)。但令我惊讶的是,GetExports() 返回 2 个惰性导出而不是 1 个。
这是一个错误还是这种行为是设计使然?我如何设置子容器以便 GetExports 在此示例中返回一个导出?
最佳答案
这是 MEF 中使用过滤目录的容器层次结构的已知限制。我相信(但现在无法确认)设置导入源:
[ImportMany(Source=ImportSource.Local)]
public IEnumerable<ITest> Tests { get; set; }
应该提供您想要的行为(但仅限于 MEF2/.NET 4.5 Developer Preview)。
希望这对您有所帮助!
关于c# - MEF 容器层次结构和 GetExports<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8999491/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!