gpt4 book ai didi

c# - 使用 C# MEF 将其他属性导入元数据

转载 作者:太空狗 更新时间:2023-10-29 21:57:43 27 4
gpt4 key购买 nike

根据网络上的一些教程,我使用 C# 中的 MEF 创建了一个满足我需要的元数据类

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class)]
public class ActionMetadataAttribute : Attribute
{
public bool HasSettingsDialog { get; set; }
public bool UseThreadedProcessing { get; set; }
}

public interface IActionMetadata
{
[DefaultValue(false)]
bool HasSettingsDialog { get; }

[DefaultValue(false)]
bool UseThreadedProcessing { get; }
}

我有不同种类的插件类型,所以有 e. G。 IHandlerMetadataHandlerMetadataAttribute。现在我通过 Lazy 帮助程序加载它以允许严格类型化的元数据。

[ImportMany(typeof(IActionPlugin))]
private IEnumerable<Lazy<IActionPlugin, IActionMetadata>> _plugins = null;

public ActionManager()
{
var catalog = new DirectoryCatalog(".");
var container = new CompositionContainer(catalog);
container.ComposeParts(this);

foreach (var contract in _plugins)
{
Debug.WriteLine(contract.Metadata.HasSettingsDialog);
}
}

完美运行。现在,我也想知道一些关于插件的信息。所以我创建了一个 PluginInformationAttribute

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class)]
public class PluginInformationAttribute : Attribute
{
public string Name { get; set; }
public string Title { get; set; }
public string Author { get; set; }
public string Url { get; set; }
public string Contact { get; set; }
public string Description { get; set; }
public Version Version { get; set; }
}

现在的问题是:如何在上面代码片段的 for 循环中访问这个属性?有什么办法还是我的设计错误?我不想将 PluginInformation 内容包含到 IActionMetadata 中,因为我想在不同类型的插件上使用它,例如。 G。在 IHandlerMetadata 上。

最佳答案

如果您将导出类的类型指定为 ActionMetadataAttribute 的属性,那么您可以使用 GetCustomAttributes 方法通过反射访问该类的每个属性

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class)]
public class ActionMetadataAttribute : Attribute
{
public bool HasSettingsDialog { get; set; }
public bool UseThreadedProcessing { get; set; }
public Type ClassType { get; set; }
}

var attributes = contract.Metadata.ClassType.GetCustomAttributes(typeof(PluginInformationAttribute), true)

关于c# - 使用 C# MEF 将其他属性导入元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25229415/

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