[英]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.