zoukankan      html  css  js  c++  java
  • .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;
                }
            }


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

  • 相关阅读:
    切割栅格数据 切割raster
    缓存讲解
    Arcengine动态发布WMS
    dos命令
    在遥感影像中,立体相对观测的原理是什么?
    Top 10 steps to optimize data access in SQL Server: Part V (Optimize database files and apply partitioning)
    http://blog.csdn.net/itanders
    How to receive Deadlock information automatically via email
    减负
    Provisioning a New SQL Server Instance Series
  • 原文地址:https://www.cnblogs.com/dunnice/p/640078.html
Copyright © 2011-2022 走看看