gpt4 book ai didi

c# - 给插件类一个人类可读的名字

转载 作者:太空狗 更新时间:2023-10-29 18:35:49 29 4
gpt4 key购买 nike

我正在为我的应用程序创建一个插件系统,我希望插件公开一个人类可读的名称。该应用程序将显示可用插件列表,在此列表中,名称需要可用。

我想让插件的开发人员非常清楚他们需要做什么才能使他们的插件正常工作。

目前我正在让插件类实现一个接口(interface),该接口(interface)需要实现一个属性“ConsumerName”。但是,这需要主应用程序创建每个插件的实例,以便使用 CunsumerName 属性,只是为了显示列表。

public interface IDataConsumer : IDisposable
{
string ConsumerName { get; }

void Consume(DataRowSet rows);

...
}

有没有办法强制插件类提供元数据而不创建每种类型的实例?

我的后备计划是在每个类上使用反射和一些属性,但我不认为可以使用接口(interface)强制使用属性。

最佳答案

不,属性不能成为接口(interface)契约的一部分。但强烈推荐它们。

我过去所做的就是制作一个属性,例如:

[AttributeUsage(AttributeTargets.Class)]
public class PluginNameAttribute : Attribute {
public string ConsumerName { get; set; }
}

如果程序员选择用该属性装饰他的类,那就太好了。如果没有,您可以求助于类名本身:

var consumerName = type.Name;
var nameAttribute = type.GetCustomAttributes(typeof(PluginNameAttribute), true)
.FirstOrDefault() as PluginNameAttribute;
if (nameAttribute != null) {
var attributeName = nameAttribute.ConsumerName;
if (!string.IsNullOrEmpty(attributeName)) {
consumerName = attributeName;
}
}

如果有文档证明他们应该这样做,那么要求插件开发人员使用该属性应该不算过分。

关于c# - 给插件类一个人类可读的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15338652/

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