gpt4 book ai didi

c# - 在 C# 中将已实现的接口(interface)指定为属性

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

我正在寻找任何可以确定这是否可行的人,我目前正在编写一个小型但可扩展的应用程序,该应用程序将具有插件架构。

为确保应用程序适用于当前应用程序,我使用自定义属性附加到程序集

[AttributeUsage(AttributeTargets.Assembly)]
class PluginAttributes: Attribute
{
public PluginAttributes(string name, string description, string version, string author)
{
Name = name;
Description = description;
Version = version;
Author = author;
}

public string Name { get; private set; }
public string Description { get; private set; }
public string Version { get; private set; }
public string Author { get; private set; }
public XXXXXX Implements { get; private set; }
}

我的目标是,'Implements' 属性将标识适当插件的接口(interface)类型。我在库中定义了很多接口(interface),例如 ICompress、IEncrypt、ILogging 等。

该属性将用于分类它是哪种类型的插件,而无需为每个创建单独的属性。

我知道我可以将它作为字符串传递并使用反射,或者使用枚举,但我希望代码尽可能少维护,这样就可以在不触及应用程序核心的情况下开发插件。

最佳答案

我已经制作了多种此类插件机制,通常创建插件类的实例并检查各种接口(interface)比在属性上定义它更容易。这将为插件实现多个接口(interface)敞开大门,这很好。

你可以像这样使用反射(假设你知道类型名称):

object plugin = Activator.CreateInstance("Assembly.Name", "Type.Class.Name");

if (plugin is ILogging)
{ ... }

if (plugin is IEncrypt)
{ ... }

对于您当前的代码,我建议您将 Implements 属性设为 Type 并使用 typeof(ILogging) 填充它, typeof(IEncrypt)

关于c# - 在 C# 中将已实现的接口(interface)指定为属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33481537/

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