在 C# 中将已实现的接口指定为属性

Specify Implemented Interface as an Attribute in C#

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

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

[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' 属性 将识别适当插件的接口类型。我在库中定义了很多接口,比如ICompress、IEncrypt、ILogging等

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

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

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

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

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

if (plugin is ILogging)
{ ... }

if (plugin is IEncrypt)
{ ... }

对于您当前的代码,我建议您制作 Implements 属性 Type 的类型并使用 typeof(ILogging)typeof(IEncrypt) 填充它,等等