• .NET基础扩展系列使用反射设计插件


    很多时候, 我们定义了一个功能接口, 可能有很多接口实现, 比如我们有一个系统, 有一个告警时间通知接口, 我们可能有短信的通知实现, 也可能有邮件的通知实现, 也可能有其他方式的通知实现, 如果根据需要加载呢?

     

    有一种方式是, 将实现这个接口的所有的dll放到一个指定目录下, 然后用反射的方式去加载实现.

    代码如下:

         Dictionary<string, IModelCodeGenerator> addInTypes = new Dictionary<string, IModelCodeGenerator>();
            string[] AddInAssemblies = Directory.GetFiles(System.Environment.CurrentDirectory, "*.dll");
            foreach (string file in AddInAssemblies)
            {
                Assembly addInAssembly = Assembly.LoadFile(file);
                foreach (Type t in addInAssembly.GetExportedTypes())
                {
                    if (t.IsClass && typeof(IModelCodeGenerator).IsAssignableFrom(t))
                    {
                        IModelCodeGenerator ai = (IModelCodeGenerator)Activator.CreateInstance(t);
                        addInTypes.Add(ai.GeneratorName, ai);
                    }
                }
            }
            if (addInTypes.Count == 1)
            {
                foreach (IModelCodeGenerator ai in addInTypes.Values)
                {
                    System.Windows.Forms.FolderBrowserDialog open = new System.Windows.Forms.FolderBrowserDialog();
                    if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        string strFolderPath = open.SelectedPath;
                        ai.GeneratorModelCode(Application.Current.Properties["Model"] as ConceptContainer, strFolderPath);
                    }
                    return;
                }
            }


    当然还有其他的办法, 比如使用配置文件进行配置接口的实现有几个, 然后使用反射在初始化的时候进行加载, 但是万变不离其宗, 就是反射. 

  • 相关阅读:
    企业——Zabbix分布式服务监控平台添加监控服务(http、nginx、mysql)
    企业——Zabbix proxy分布式监控配置
    企业——Zabbix Agent Active 主动模式监控
    Linux背背背(4)vim操作
    Linux背背背(3)
    Linux背背背(2)
    如何防止远程提交?
    PHP常用的转义函数
    本博客点击页面,浮出文字的特效
    华硕R系列的解剖图
  • 原文地址:https://www.cnblogs.com/dunnice/p/640078.html
Copyright © 2020-2023  润新知