簡體   English   中英

將已實現的接口指定為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'屬性將標識適當的插件的Interface類型。 我在庫中定義了許多接口,例如ICompress,IEncrypt,ILogging等。

該屬性將用於對插件類型進行分類,而不必為每個插件創建單獨的屬性。

我知道我可以將其作為字符串傳遞並使用反射或使用枚舉,但是我希望代碼的維護成本盡可能低,以便可以在不接觸應用程序核心的情況下開發插件。

我做了各種各樣的這種類型的插件機制,通常創建插件類的實例並檢查各種接口要比在屬性上定義它容易。 這將為插件實現多個接口打開大門,這很好。

您可以使用反射來做到這一點(假設您知道類型名稱):

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

if (plugin is ILogging)
{ ... }

if (plugin is IEncrypt)
{ ... }

對於當前代碼,我建議您將Implements屬性的Type ,並使用typeof(ILogging)typeof(IEncrypt)等進行typeof(IEncrypt)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM