c# 简单实现 插件模型 反射方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 简单实现 插件模型 反射方式相关的知识,希望对你有一定的参考价值。

利用反射方式实现插件模型,wpf控件作为插件,然后用另外的窗体加载。

首先定义插件接口:

    public interface IUserControlLevel1
    {
        string PluginName { get; set; }
        int PluginIndex { get; set; }
    }

 

userControl继承定义的接口:

    /// <summary>
    /// UserControl1.xaml 的交互逻辑
    /// </summary>
    public partial class UserControl1 : UserControl, IUserControlLevel1
    {
        public UserControl1()
        {
            InitializeComponent();
        }



        public string PluginName
        {
            get;
            set;
        }

        public int PluginIndex
        {
            get;
            set;
        }
    }

 

 

管理类里定义寻找插件,并返回结果。

主要代码如下:

   public static List<IUserControlLevel1> GetUserControlLevel1(string directoryPath)
        {
            List<IUserControlLevel1> li = new List<IUserControlLevel1>();
            string[] files = Directory.GetFiles(directoryPath, "*.dll");
            foreach (var file in files)
            {
                Assembly assembly = Assembly.LoadFrom(file);//加载控件
                Type[] types = assembly.GetTypes();//加载所有类型
                foreach (var type in types)
                {
                    if (!type.IsClass || type.IsNotPublic)
                    {
                        continue;
                    }
                    Type[] interfaces = type.GetInterfaces();//加载该类型接口

                    if (interfaces.Contains(typeof(IUserControlLevel1)))
                    {
                        object obj = Activator.CreateInstance(type);
                        IUserControlLevel1 uc = (IUserControlLevel1)obj;


                        Object obj2 = type.InvokeMember(type.FullName,
BindingFlags.CreateInstance, null, null, null);
                        IUserControlLevel1 uc2 = (IUserControlLevel1)obj2;


                        li.Add(uc2);
                        continue;
                    }
                }
            }
            return li;
        }

 

然后主窗体可以寻找默认路径下的插件 并加载到界面。

源码下载地址如下:

http://files.cnblogs.com/files/lizhijian/%E6%8F%92%E4%BB%B6%E6%A8%A1%E5%9E%8B.rar

以上是关于c# 简单实现 插件模型 反射方式的主要内容,如果未能解决你的问题,请参考以下文章

045-利用反射机制,简单的实现PHP插件模式

Day01

C#用dynamic一行代码实现反射操作

.Net插件编程模型:MEF和MAF

简单的c#插件框架

C#反射之基础应用实例总结