lundi 2 novembre 2015

Specify Implemented Interface as an Attribute in C#

I'm looking for anyone that can identify if this is possible or not, I am currently writing a small but extensible application that will have a plugin architecture.

To ensure the application is applicably to the current application, I'm using a custom Attribute to attach to the assembly

[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; }
    }

What I aiming for, is that the 'Implements' property will identify the appropriate plugin's Interface type. I have numerous interfaces defined in the library, such as ICompress, IEncrypt, ILogging, etc.

The attribute will be used to classify which type of plugin it is, without having to create a separate attribute for each.

I know I could have it passed as a string and use reflection, or use an enum, but I want the code to be as low-maintenance as possible, so that plugins can be developed without touching the core of the application.





Aucun commentaire:

Enregistrer un commentaire