- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 MEF 的新手,正在尝试使用 ExportFactory。我可以使用 ExportFactory 创建基于用户插入对象的列表吗?示例将类似于下面显示的内容。我可能不理解 ExportFactory 的使用,因为在运行时我在组合过程中收到如下所示的错误。
1) No valid exports were found that match the constraint '((exportDefinition.ContractName == "System.ComponentModel.Composition.ExportFactory(CommonLibrary.IFoo)") AndAlso (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") AndAlso "System.ComponentModel.Composition.ExportFactory(CommonLibrary.IFoo)".Equals(exportDefinition.Metadata.get_Item("ExportTypeIdentity"))))', invalid exports may have been rejected.
class Program
{
static void Main(string[] args)
{
Test mytest = new Test();
}
}
public class Test : IPartImportsSatisfiedNotification
{
[Import]
private ExportFactory<IFoo> FooFactory { get; set; }
public Test()
{
CompositionInitializer.SatisfyImports(this);
CreateComponent("Amp");
CreateComponent("Passive");
}
public void OnImportsSatisfied()
{
int i = 0;
}
public void CreateComponent(string name)
{
var componentExport = FooFactory.CreateExport();
var comp = componentExport.Value;
}
}
public interface IFoo
{
double Name { get; set; }
}
[ExportMetadata("CompType", "Foo1")]
[Export(typeof(IFoo))]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.NonShared)]
public class Foo1 : IFoo
{
public double Name { get; set; }
public Foo1()
{
}
}
[ExportMetadata("CompType", "Foo2")]
[Export(typeof(IFoo))]
[PartCreationPolicy(System.ComponentModel.Composition.CreationPolicy.NonShared)]
public class Foo2 : IFoo
{
public double Name { get; set; }
public Foo2()
{
}
}
最佳答案
问题似乎是您希望导入单个 ExportFactory<IFoo>
, 但您导出了两个不同的 IFoo
实现。在您的示例中,MEF 无法在两种实现之间做出决定。
您可能想要导入多个工厂,包括像这样的元数据:
[ImportMany]
private IEnumerable<ExportFactory<IFoo,IFooMeta>> FooFactories
{
get;
set;
}
哪里IFooMeta
会这样声明:
public interface IFooMeta
{
string CompType { get; }
}
然后你可以实现CreateComponent
像这样:
public IFoo CreateComponent(string name, string compType)
{
var matchingFactory = FooFactories.FirstOrDefault(
x => x.Metadata.CompType == compType);
if (matchingFactory == null)
{
throw new ArgumentException(
string.Format("'{0}' is not a known compType", compType),
"compType");
}
else
{
IFoo foo = matchingFactory.CreateExport().Value;
foo.Name = name;
return foo;
}
}
关于c# - 你如何使用 ExportFactory<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11488297/
使用 MEF 的桌面应用程序导入许多“ServiceProvider”。每个部分 (ServiceProvider) 都是单独 DLL 中的一个类。所有 DLL 都在桌面应用程序使用的“插件”文件夹中
我是 MEF 的新手,正在尝试使用 ExportFactory。我可以使用 ExportFactory 创建基于用户插入对象的列表吗?示例将类似于下面显示的内容。我可能不理解 ExportFactor
我们最近刚改用 .Net4.5,我正在进行一些重构以利用新的 ExportFactories。 我的问题是,当我将它们注入(inject)到我的构造函数中时,我如何模拟它们以进行单元测试,但我不能 1
基本上,有没有一种简单的方法来处理由 ExportFactory 创建的导入? ?我问的原因是因为导出通常包含对仍然存在的东西的引用,例如 EventAggregator。我不想遇到这样的问题,即我正
我找不到它!? 最佳答案 ExportFactory不是桌面 MEF 的一部分(但是 - 截至目前,它仅针对 Silverlight 发布)。看起来它将包含在 MEF 2 中。 与此同时,Glenn
我是一名优秀的程序员,十分优秀!