gpt4 book ai didi

c# - 来自对象的 MEF 元数据字典

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:04 25 4
gpt4 key购买 nike

我想为合成手动创建导出,但导出构造函数只接受元数据字典,而我应该直接从元数据对象 (IMyMetadata) 创建它。没有办法从对象创建字典吗?像这样:

IDictionary<string, object> metadata = AttributedModelServices.GetMetadataDictionary(metadata)

其中元数据是 IMyMetadata 对象。

基本上,我的需要是使用导入的 IEnumerable> 来创建新的组合,将值“转发”到另一个 CompositionBatch。

谢谢

最佳答案

Isn't there a way to create the dictionary from the object?

当然,像这样:

  public static IDictionary<string, object> GetPropertiesDictionary<T>(object o)
{
var dictionary = new Dictionary<string, object>();
foreach (var property in typeof(T).GetProperties())
{
dictionary[property.Name] = property.GetValue(o,null);
}
return dictionary;
}

Essentially, my need is that of using an imported IEnumerable to create new compositions, sort of "forwarding" values to another CompositionBatch

听起来您正在尝试实现某种 "ExportMany" MEF 中尚不存在的功能。 (它确实存在于其他一些 IOC 容器中,例如 lightweight adapters in AutoFac )。您可能不需要这样的功能。

我假设您有某种类型的导出 (IStuff) 可用,但您需要将它们包装在适配器中,以便您可以将它们作为其他内容导入 (IAdaptedStuff)。也许您可以坚持使用普通的属性编程模型并执行如下操作:

[Export(typeof(IAdaptedStuffUser))]
public class AdaptedStuffUser : IAdaptedStuffUser
{
[Import] // instead of [ImportMany(typeof(IAdaptedStuff)))]
public IAdaptedStuffProvider AdaptedStuffProvider { private get; set; }

public void DoSomething()
{
foreach (var adaptedStuff in AdaptedStuffProvider.GetAdaptedStuff())
{
...
}
}
}

[Export(typeof(IAdaptedStuffProvider))]
public AdaptedStuffProvider : IAdaptedStuffProvider
{
[ImportMany]
public IEnumerable<IStuff> StuffToAdapt { get; set; }

public IEnumerable<IAdaptedStuff> GetAdaptedStuff()
{
return StuffToAdapt.Select(x => new Adapter(x));
}
}

关于c# - 来自对象的 MEF 元数据字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3975139/

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