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;
                }
            }


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

  • 相关阅读:
    Ajax与JSON的一些总结
    ASP.NET Cache的一些总结
    8个非常有用的HTML5工具
    Trie树和Ternary Search树的学习总结
    仿微博字符统计和本地存储功能的实现
    SQL Server 高性能写入的一些总结
    Deadlock的一些总结
    Javascript Context和Scope的一些学习总结
    网络攻击技术——Broken authentication
    Ember.js的一些学习总结
  • 原文地址:https://www.cnblogs.com/dunnice/p/640078.html
Copyright © 2011-2022 走看看