C#插件技术基础

从原理上很简单,先定义统一接口,主程序根据预定义的接口加载DLL,示例代码

public static int Test()
        {
            try
            {
                System.IO.FileInfo fi = new System.IO.FileInfo("noock.demo.plugins.dll");     //   加载插件库
                System.Console.WriteLine("Loading file:{0}", fi.FullName);
                System.Reflection.Assembly plugin = System.Reflection.Assembly.LoadFile(fi.FullName);

                string[] names = { "noock.demo.plugins.HelloMessager", "noock.demo.plugins.ByeMessager" };    // 示例插件
                foreach (string className in names)
                {
                    System.Type ta = plugin.GetType(className, true);
                    Object oa = Activator.CreateInstance(ta);          // 要求有一个不带参数的构造函数,如果需要参数也可以使用其它的重载函数
                    if (!(oa is IMessager))    // IMessager为统一接口
                        throw new Exception(string.Format("Not a class type implemented interface IMessager"));
                    IMessager ia = oa as IMessager;
                    MessageBox.Show(ia.GetMessage());
                }
            }catch(Exception ex){
                MessageBox.Show(String.Format("Plug-in test failed:{0}/r/n{1}", ex.Message, ex.StackTrace));
                return -1;
            }
            return 0;
        }

你可能感兴趣的:(exception,String,object,C#,dll,interface)