如何在不初始化或构造对象的情况下从对象获取属性

时间:2015-03-22 12:39:59

标签: c# interface

它听起来不应该是可能的,但我想在写完之前先询问。

我正在编写一个带有插件系统的应用程序,我希望在初始化或构建它之前获取插件类中包含的属性

接口:

public interface IMPlugin
{
    string PluginName { get; }
    string PluginSafeName { get; }
    string PluginDescription { get; }
    Version PluginVersion { get; }
    string PluginAuthorName { get; }

    [DefaultValue(null)]
    string PluginAuthorEmail { get; }

    [DefaultValue(null)]
    string PluginAuthorURL { get; }

    [DefaultValue(false)]
    bool PluginActive { get; set; }
    /// <summary>
    /// Plugin ID issued by InputMapper. Used for updates. </summary>
    int PluginID { get; }
}

插件:

   public class InputMonitor : IMPlugin,ApplicationPlugin
    {
        public string PluginName { get { return "My Plugin"; } }
        public string PluginSafeName { get { return "MyPlugin"; } }
        public string PluginDescription { get { return "My Plugin."; } }
        public Version PluginVersion { get { return new Version("0.1.0.0"); } }
        public string PluginAuthorName { get { return "John Doe"; } }
        public string PluginAuthorEmail { get { return "foo@bar.com"; } }
        public string PluginAuthorURL { get { return ""; } }
        public int PluginID { get { return 0; } }

        public bool PluginActive { get; set; }

        public InputMonitor()
        {

        }
    }

我的问题是我希望我的应用程序能够在初始化之前检索插件信息,以便用户可以随意激活和停用插件,但插件的详细信息仍然可以在插件浏览器中看到。但我不想依赖插件开发人员在构造函数中不做任何事情,只将代码放在其他接口方法中。

是否可以初始化对象并强制忽略其构造函数,或者是否有某些东西不允许构造函数一起使用?

2 个答案:

答案 0 :(得分:3)

听起来你的插件应该通过attributes配置而不是通过公开属性来配置:

[Plugin(Name = "My Plugin", SafeName = "MyPlugin" ...)]
public class InputMonitor

您可以通过反射访问属性,而无需创建类的实例。

毕竟,这是关于类型的元数据 - 而不是关于该类型的任何一个实例的信息。

答案 1 :(得分:0)

初始化一个类并调用它的构造函数是一回事。

要么构造一个插件类的实例,只是为了读取它的属性,然后扔掉它。

或者

你有第二个助手/描述类。 (我知道你不想要)

相关问题